题目:
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。
示例:
输入: [2,1,5,6,2,3]
输出: 10
思路:单调栈。
简单的想法是枚举宽或者枚举高。枚举宽就是2层循环嵌套确定宽度,高是宽度中最矮柱子的高。枚举高就是固定一个柱子的高不动,然后尽可能向两边延伸宽度。这两种做法会超时。
单调栈,就是一个栈,且栈中元素单调递增。
按照枚举高的思路,当前位置设为i
,我们需要向左向右找出第一个高度小于heights[i]
的索引。借助单调栈可以很容易完成。
遍历heights
,对每一个柱子i
进行如下操作:
- 如果栈不为空,并且栈顶