2023.8.28
本题类似于下一个更大元素I ,区别就是数组变成循环的了,可以将nums数组先double一下,如:{1,2,1}变成{1,2,1,1,2,1},再用单调栈的方法求出ans数组,最后将ans数组截一半即可。 代码如下:
class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {vector<int> new_nums(nums.begin(),nums.end());nums.insert(nums.end(),new_nums.begin(),new_nums.end());vector<int> ans(nums.size());stack<int> stk;for(int i=nums.size()-1; i>=0; i--){while(!stk.empty() && nums[i]>=stk.top()) stk.pop();ans[i] = stk.empty()? -1 : stk.top();stk.push(nums[i]);}ans.resize(ans.size()/2);return ans;}
};