代码随想录算法训练营第五十九天|LeetCode503. 下一个更大元素 II、LeetCode42. 接雨水

一、LeetCode503. 下一个更大元素 II

题目链接:503. 下一个更大元素 II

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        vector<int>answer(nums.size(), -1);
        if(nums.size() == 0) return answer;
        stack<int>st;

        for(int i = 0; i < nums.size() * 2; i++) {
            while(!st.empty() && nums[i % nums.size()] > nums[st.top()]) {
                answer[st.top()] = nums[i % nums.size()];
                st.pop();
            }
            st.push(i % nums.size());
        }
        return answer;

    }
};

二、LeetCode42. 接雨水

题目链接:42. 接雨水

class Solution {
public:
    int trap(vector<int>& height) {
         stack<int> st;
        st.push(0);
        int sum = 0;
        for (int i = 1; i < height.size(); i++) {
            while (!st.empty() && height[i] > height[st.top()]) {
                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;
                    sum += h * w;
                }
            }
            st.push(i);
        }
        return sum;

    }
};

你可能感兴趣的:(C++算法题解,算法,leetcode,动态规划)