day-60 代码随想录算法训练营(19)单调栈 part 03

84.柱状图中最大的矩形

思路一:单调栈
class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        heights.insert(heights.begin(),0);//头加0,防止刚开始
        heights.push_back(0);//尾巴上加0,防止一直递增最后丢失数据
        int n=heights.size();
        stack<int>st;
        st.push(0);
        int res=0;
        for(int i=1;i<n;i++){
            while(heights[i]<heights[st.top()]){
                int mid=st.top();//找到右边第一个比自己小的数
                st.pop();
                int w=i-st.top()-1;
                int h=heights[mid];
                res=max(res,w*h);
            }
            st.push(i);
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/Ricardo_XIAOHAO/article/details/133208913