n个整数的无序数组,找到每个元素后面比他大的第一个元素(用栈实现)
程序员文章站
2024-03-15 19:07:48
...
今天看到刷面试题看到一个比较精妙的算法,反正让我想我想破头都是想不出来的。。。。
题目:n个整数的无序数组,找到每个元素后面比他大的第一个元素,(要求时间复杂度为O(N))
参考答案:
vector<int> findMax(vector<int> num)
{
if(!num.size()) return num; //num为空则直接返回
vector<int> res(num.size()); //保存返回结果
int i=0;
stack<int> s;
while(i<num.size()){ //这个循环里看的不是特别懂.....
if(s.empty()||num[s.top]>=num[i]){
s.push(i++);
}
else{
res[s.top()]=num[i];
s.pop();
}
}
while(!s.empty()){ //处理找不到更大值的元素
res[s.top()]=INT_MAX;
s.pop();
}
for(int i=0;i<res.size();i++) //输出结果
cout<<res[i]<<endl;
return res;
}
总之真的佩服那些栈用得好的大佬!!Orz