leetcode 84.Largest Rectangle in Histogram

单调栈


题意:

n个高度不同宽度都是1的矩形并在一起,问最大矩形面积.


思路:

单调栈的经典题.

考虑每个矩形往两边拓展,直到比它矮的就停下来,然后它的高度*最左到最右的宽度就是候选答案.


暴力做的话O(n2),我们可以用单调栈优化到O(n).

栈里存放下标,从栈底到栈顶下标增加,同时对应的高度也是增加.

从左往右扫描,对每个矩形都pop掉大于等于自己高度的下标,然后它能往左拓展的最左下标就是栈顶+1.

因为栈顶<自己,而大于等于自己的都pop掉了.

之后记得把自己push进栈里.

同样地从右往左扫描得到每个矩形往右拓展的最右下标,然后求max即可.


为什么是O(n)的时间复杂度?扫描是O(n)的,而维护栈的复杂度比较抽象.

从整体看,一次扫描里每个矩形最多push一次,pop一次,因此总体是O(n)的,或者说均摊O(1).


总结:

每个矩形往左往右尽量扩展,用单调栈优化.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值