leetcode 503. 下一个更大元素 II

2023.8.28

leetcode 503. 下一个更大元素 II_第1张图片

         本题类似于下一个更大元素I ,区别就是数组变成循环的了,可以将nums数组先double一下,如:{1,2,1}变成{1,2,1,1,2,1},再用单调栈的方法求出ans数组,最后将ans数组截一半即可。 代码如下:

class Solution {
public:
    vector nextGreaterElements(vector& nums) {
        vector new_nums(nums.begin(),nums.end());
        nums.insert(nums.end(),new_nums.begin(),new_nums.end());
        vector ans(nums.size());
        stack 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;
    }
};

你可能感兴趣的:(leetcode专栏,leetcode,算法,数据结构,cpp)