代码随想录算法训练营第59天 | 503. 下一个更大元素 II、42. 接雨水

503. 下一个更大元素 II

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

42. 接雨水

class Solution {
public:
    int trap(vector& height) {
        stack st;
        st.push(0);
        int n = height.size();
        int ans = 0;
        for (int i = 1; i < n; i++) {
            while (!st.empty() && height[st.top()] < height[i]) {
                int mid = st.top();
                st.pop();
                if (!st.empty()) {
                    int h = min(height[st.top()], height[i]) - height[mid];
                    int w = i - st.top() - 1; // 注意减一,只求中间宽度
                    ans += h * w;
                }
            }
            st.push(i);
        }
        return ans;
    }
};

你可能感兴趣的:(代码随想录,leetcode)