Bootstrap

代码随想录算法训练营第六十三天|42. 接雨水、84. 柱状图中最大的矩形

代码随想录算法训练营第六十三天

42. 接雨水

题目链接:42. 接雨水

class Solution {
public:
    int trap(vector<int>& height) {
        int result = 0;
        stack<int> st;
        if (height.size() != 0)
            st.push(0);
        else
            return 0;
        for (int i = 1; i < height.size(); i++) {
            if (height[i] <= height[st.top()]) {
                st.push(i);
            } else {
                while (!st.empty() && height[i] > height[st.top()]) {
                    int mid = st.top();
                    int right = i;
                    st.pop();
                    if (!st.empty()) {
                        int left = st.top();
                        int area =
                            (min(height[left], height[right]) - height[mid]) *
                            (right - left - 1);
                        result += area;
                    }
                }
                st.push(i);
            }
        }
        return result;
    }
};

84. 柱状图中最大的矩形

题目链接:84. 柱状图中最大的矩形

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        stack<int> st;
        int result = 0;
        if (heights.size() < 2)
            return heights[0];
        heights.insert(heights.begin(), 0);
        heights.push_back(0);
        st.push(0);

        for (int i = 1; i < heights.size(); i++) {
            if (heights[i] >= heights[st.top()]) {
                st.push(i);
            } else {
                while (!st.empty() && heights[i] < heights[st.top()]) {
                    int right = i;
                    int mid = st.top();
                    st.pop();
                    if (!st.empty()) {
                        int left = st.top();
                        int h = heights[mid];
                        int w = right - left - 1;
                        int area = h * w;
                        result = max(result, area);
                    }
                }
                st.push(i);
            }
        }
        return result;
    }
};

;