0084:柱状图中最大的矩形(★★)
目录
题目
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例 1:
输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10
示例 2:
输入: heights = [2,4] 输出: 4
提示:
1 <= heights.length <=105
0 <= heights[i] <= 104
相似问题:
分析
- 遍历矩形的底太费时,有个巧妙的想法是遍历矩形的高
- 最大矩形的高度必然是某个柱子的高度
- 于是遍历每根柱子作为高,找左右能延伸的最大宽度即可
- 找左右第一根更矮的柱子,容易想到单调栈
- 栈 sk 严格递增
- 遍历到位置 j 且出栈位置 i 时,i 的上一个更小元素即为 sk[-1]
- 如果 heights[i]>heights[j],i 的下一个更小元素即为 j,即得到 i 对应的最大宽度
- 如果 heights[i]==heights[j],i 和 j 对应的最大宽度相同,可以留给 j 来计算
注意最后栈中可能还有剩余元素,需要遍历计算。一个更简单的做法是在 heights 末尾加一个极小值,让所有元素都出栈。
解答
|
|
233 ms