题目:给定一个整型数组,数组元素随机无序的,要求打印出所有元素右边第一个大于该元素的值。要求时间复杂度O(n)。
借助栈结构可以一次遍历完数组,得到结果。
#define INVALID_MAX -1
vector<int> findMax(vector<int> num)
{
if(num.size()==0)
return num;
vector<int> res(num.size());
int i=0;
stack<int> s;
while(i<num.size())
{
if(!s.empty() && num[i] > num[s.top()])
{
res[s.pop()]=num[i];
}
else
{
s.push(i++);
}
}
while(!s.empty())
{
res[s.pop()]=INVALID_MAX;
}
return res;
}