84. 柱状图中最大的矩形

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

示例 1:

84. 柱状图中最大的矩形_第1张图片

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10

示例 2:

84. 柱状图中最大的矩形_第2张图片

输入: heights = [2,4]
输出: 4

提示:

  • 1 <= heights.length <=105
  • 0 <= heights[i] <= 104
class Solution {
public:
    int largestRectangleArea(vector& h) {
        //能围城的最大面积,取决于最小值。即需要找到目标值的左边第一个小于的,找到右边第一个小于的
        stackst;
        st.push(0);
        int res = 0, sum = 0;
        //以防原数据就是递减,导致没走到处理结果的程序
        h.insert(h.begin(),0);
        h.push_back(0);

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

你可能感兴趣的:(leetcode练习,算法,c++)