算法题打卡day59-单调栈 | 503.下一个更大元素II、42. 接雨水

503. 下一个更大元素 II - 力扣(LeetCode)

状态:查看思路后AC。

和每日温度一样,区别在于走两边数组,代码如下:

class Solution {
public:
    vector nextGreaterElements(vector& nums) {
        int len = nums.size();
        vector res(len, -1);
        stack st;
        for(int i = 0; i < len * 2; ++i){
            while(!st.empty() && nums[i % len] > nums[st.top()]){
                res[st.top()] = nums[i % len];
                st.pop();
            }
            st.push(i % len);
        }
        return res;
    }
};

42. 接雨水 - 力扣(LeetCode)

状态:没思路。

利用了单调栈找寻某一侧第一个最大/小值的特性,增加了对新增元素较栈顶元素大时的计算处理,代码如下:

class Solution {
public:
    vector nextGreaterElements(vector& nums) {
        int len = nums.size();
        vector res(len, -1);
        stack st;
        for(int i = 0; i < len * 2; ++i){
            while(!st.empty() && nums[i % len] > nums[st.top()]){
                res[st.top()] = nums[i % len];
                st.pop();
            }
            st.push(i % len);
        }
        return res;
    }
};

你可能感兴趣的:(算法)