代码随想录算法训练营第六十天 | 84.柱状图中最大的矩形,随想录题单一刷结束啦,训练营也完结了

打卡第60天,

今日任务

84.柱状图中最大的矩形

84.柱状图中最大的矩形

代码随想录

本题是要找每个柱子左右两边第一个小于该柱子的柱子,所以从栈头(元素从栈头弹出)到栈底的顺序应该是从大到小的顺序!

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        stack<int> st;
        int res = 0;
        heights.insert(heights.begin(), 0);
        heights.push_back(0);
        
        for(int i = 0; i < heights.size(); i++) {
            while(!st.empty() && heights[i] <= heights[st.top()]) {
                int mid = st.top();;
                st.pop();
                if(!st.empty()) {
                    int left = st.top();
                    int right = i;
                    int w = right - left - 1;
                    int h = heights[mid];
                    res = max(res, h * w);
                }
            }
            st.push(i);
        }
        return res;
    }
};

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