测试用例(从网上找到了两个):
如数组A=[1,5,3,6,4,8,9,10] 输出[5, 6, 6, 8, 8, 9, 10, -1]
如数组A=[8, 2, 5, 4, 3, 9, 7, 2, 5] 输出[9, 5, 9, 9, 9, -1, -1, 5, -1]
分析:用个栈,大的在下,小的在上。当检索到一个数字,比较该数字与top的大小,大的话就记录。最坏的时间复杂度是O(2n),即O(n)。
代码:
vector<int> getMaxArray(vector<int> nums){
// 一个用来保存答案,一个用来记录最大值
vector<int> res(nums.size(),-1);
stack<pair<int,int>> que;
// 检索比较
for(int i = 0;i < nums.size();++i){
if(!que.empty()){
while(!que.empty() && nums[i] > que.top().first){
// 找到答案就记录下来
res[que.top().second] = nums[i];
que.pop();
}
}
// 将新的数字加入到栈中
que.emplace(make_pair(nums[i],i));
}
return res;
}