LeetCode第84题--柱状图的最大矩形

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

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

图片1
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
图片2
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

示例:
输入: [2,1,5,6,2,3]
输出: 10

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        stack<int> sta;
        vector<int> heightsCp;
        heightsCp.assign(heights.begin(), heights.end());
        heightsCp.push_back(-1);
        int maxRes = -1;
        for(int i = 0; i < heightsCp.size(); i++)
        {
            while(!sta.empty() && heightsCp[i] < heightsCp[sta.top()])
            {
                int height = heightsCp[sta.top()];
                sta.pop();
                int weight = (sta.empty() ? i : i-sta.top()-1);
                maxRes = max(maxRes, height*weight);
            }
            sta.push(i);
        }
        return maxRes;    
    }
};

使用单调栈矩阵索引,找到矩阵的高度和左右边沿
右边沿:右边第一个矮于当前栈顶元素A的柱子
左边沿:单调栈中紧临栈顶A的柱子,如果A已出栈,左边沿就是A出栈后的栈顶,若A出栈后栈为空,说明A出栈后左边沿没有比它矮的,左边沿可以到栈顶0

具体思路可参考该帖:https://blog.csdn.net/Zolewit/article/details/88863970

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值