方法:单调栈
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int n = nums.size();
nums.resize(2 * n); //数组长度增加二倍
for (int i = n; i < 2 * n; ++i){ //nums[0]...nums[n-1] nums[0]...nums[n-1]
nums[i] = nums[i - n];
}
//单调递减栈 stk[top] 为下标 nums[stk[top]]为栈顶元素的值
int top = -1; //top指向栈顶位置
vector<int> ans(n, -1); //存储下一个更大元素的值
vector<int> stk(2 * n); //存储下标
for (int i = 0; i < 2 * n; ++i){
while (top != -1 && nums[stk[top]] < nums[i]) {
if (stk[top] < n) ans[stk[top]] = nums[i];
top--;
}
stk[++top] = i;
}
return ans;
}
};