题目
前沿
这个题目是典型的单调栈问题,主要是因为需要记录当前元素后面有序元素的关系,那么这个就能很好的利用单调栈的有序的性质。但是这个里面需要考虑的是循环如何处理,下面给的代码是通过叠加一倍然后通过取余来实现的。能够这样实现是因为顺序是一致的。
代码
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
//利用单调栈来解决这个问题
int n = nums.size();
vector<int> res(n, -1);
if(n==0) return res;
stack<int> S;
for(int i=0;i<n*2-1;i++){
while(!S.empty() && nums[S.top()] < nums[i%n]){
res[S.top()] = nums[i%n];
S.pop();
}
S.push(i%n);
}
return res;
}
};