https://leetcode-cn.com/problems/next-greater-element-ii/
思路:单调栈模板题,只不过变成了环形数组。序列化环其实很简单,比如
1
、
2
、
3
1、2、3
1、2、3化环就是
1
、
2
、
3
、
1
、
2
1、2、3、1、2
1、2、3、1、2,把序列的前
n
−
1
n-1
n−1个元素放到尾端即可。
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int siz=nums.size();
vector<int> ans(siz,-1);
if(!siz)
return ans;
int n=2*siz-1;
stack<int> s;
for(int i=0;i<n;i++){
int tmp,idx=i>=siz?i-siz:i;
while(!s.empty()&&nums[idx]>nums[tmp=s.top()]){
ans[tmp>=siz?tmp-siz:tmp]=nums[idx];
s.pop();
}
s.push(idx);
}
return ans;
}
};