利用单调栈的思想
#include
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
stack<int> s;
vector<int> res;
//将原数组后面添上循环的内容,变为线性伪循环数组
int length=nums.size();
for(int i=0;i<length-1;i++)
nums.push_back(nums[i]);
//从后往前遍历伪循环数组,利用单调栈的思想进行处理
for(int i=nums.size()-1;i>=0;i--)
{
while(!s.empty()&&s.top()<=nums[i])
s.pop();
if(s.empty()) //如果不存在,则输出 -1
res.push_back(-1);
else
res.push_back(s.top());
s.push(nums[i]);
}
//对结果的处理
reverse(res.begin(),res.end());
for(int i=0;i<length-1;i++)
res.pop_back();
return res;
}
};