#X0084. 柱状图中最大的矩形
柱状图中最大的矩形
柱状图中最大的矩形
题目描述
给定 n
个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例
示例 1
输入:
heights = [2,1,5,6,2,3]
输出:
10
解释:
最大的矩形为红色区域,高度为5,宽度为2,面积为10
示例 2
输入:
heights = [2,4]
输出:
4
解释:
最大矩形可以是高度4宽度1,或高度2宽度2
提示
1 <= heights.length <= 10^5
0 <= heights[i] <= 10^4
解法思路
单调栈解法
-
核心思想:对于每个柱子,找到左右第一个比它矮的柱子作为边界
-
算法步骤:
- 初始化栈和最大面积变量
- 遍历柱状图:
- 当栈不为空且当前柱子高度 < 栈顶柱子高度:
- 弹出栈顶作为计算高度
- 计算宽度 = 当前索引 - 新栈顶索引 - 1
- 更新最大面积
- 当前索引入栈
- 当栈不为空且当前柱子高度 < 栈顶柱子高度:
- 处理栈中剩余柱子
-
复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(n)