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;
}
};