vector<int> findMax2(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[s.top()] >= num[i])//如果堆栈里面有的top元素比即将到来的元素大,则入栈,直到右边找到比top元素大的,
{
s.push(i++);//i增加,遍历下个元素
}
else//栈里面有元素,且满足num[i] 比栈里面的元素大,则找到s.top()位置对应值,右边第一个元素其大的元素
{
res[s.top()] = num[i];
s.pop();//此处仅仅弹出top元素,因为其找到了右边第一个元素比其大的值,而i不变化,是因为num[i]也有可能比pop之后top元素大
}
}
while (!s.empty())//如果不为空,说明这些元素没有找到
{
res[s.top()] = INT_MAX;//直接用INT_MAX标记
s.pop();
}
for (int i = 0; i < res.size(); i++)
cout << res[i] << endl;
return res;
}
int num_data[10] = { 1, 3, 2, 5, 4, 7, 6, 8, 9, 0 };
vector<int> num_test(num_data, num_data + 10);
findMax2(num_test);