最大矩形面积问题——单调栈法
直方图最大矩形面积
-
给定非负整数数组 heights ,数组中的数字用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例1
输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10
示例2
输入: heights = [2,4]
输出: 4
分析
-
矩形的面积就是宽x高,因此只要能确定每个举行的宽和高,就能计算出它的面积。
-
宽可以通过数组下标相减的方式获得,至于高,只需要找对应范围的数组中的最小值即可得到,由此便可以得到面积
-
该类题型有三种解法:暴力破解、分治法、单调栈法。
- 暴力破解:
- 即便利所有的矩形,同时维护一个表示最大面积的变量即可
- 分治法:
- 观察示例1可以发现,直方图的最大矩形有以下三种可能:
- 1、矩形通过最矮的柱子,宽是最大的状态下。
- 2、起始的柱子和终止的柱子始终在最矮的柱子的左侧。
- 3、起始的柱子和终止的柱子始终在最矮的柱子的右侧。
- 于是可以有如下思路:找到最矮的柱子,分别计算这三种状态,其中23本质上是同一种情况,即将一个区域分成左右两遍,求最大矩形,如此便是两个相同的子问题,可递归求解。
- 观察示例1可以发现,直方图的最大矩形有以下三种可能:
- 单调栈法:
- 见下节
- 暴力破解: