Largest Rectangle in Histogram
Given n non-negative integers representing the histogram’s bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.
(在条形图中取最大矩形面积)
Example:
1. 堆栈
维护一个栈来存储升序序列,当遇到当前 height 小于栈顶 height 时,考虑计算。以栈顶的高度为高,栈顶 index 到 i-1 为宽的矩形。其中在pop过程中栈顶为空时,则需要将其维护为 “-1”,因为当 stack 为空时,说明数组中的最小值(所有高度中的最小值已经pop出来了,因此前面的所有都可以算作面积)。其时间复杂度为O(n),空间复杂度为O(n)。具体实现过程如下:
Note:
- 在 heights 尾部增加一个 “0” 是为了防止在数组尾部的最后一个升序序列没有计算,如[3, 4, 1, 3, 5, 7]。
- stack 存储的是 index 是为了方便计算矩形的 width。
- 可以事先维护 stack 为 [-1],这样就不用考虑单独 stack 为空的情况了。
1 | class Solution: |