Menu
CoddyTech

Largest Rectangle in Histogram

困难单调栈python iconjava iconcpp iconc iconjs icon+10

直方图是一排并排排列、彼此之间没有间隙的柱子,每根柱子的宽度都是 1:heights[i] 表示第 i 根柱子的高度。直方图中的矩形覆盖一段相邻的柱子,其高度不能超过这段柱子中最矮的那根。

返回这样的矩形所能达到的最大面积。

函数

largestRectangleArea(heights: integer-array) → integer
heightsinteger-array
每个柱子的高度,从左到右
返回值integer
直方图中能容纳的最大矩形的面积

约束条件

  • 1 ≤ heights.length ≤ 2 × 104
  • 0 ≤ heights[i] ≤ 105
  • 每根柱子的宽度都是 1 个单位,因此覆盖从 i 到 j 的柱子的矩形宽度为 j-i+1 个单位。

示例

输入
heights = [2, 5, 6, 3, 4, 1]
输出
12
解释
高度为 5、6、3 和 4 的柱子都至少有 3 高,因此可以跨越它们构成一个高度为 3 的矩形:3 × 4 = 12。最高的两根柱子只能构成 5 × 2 = 10。
challenge icon

进阶

假设每根柱子都有自己的宽度,这些宽度存放在第二个数组中。那么,单次遍历的栈解法需要做哪些改动?

重置代码
def largestRectangleArea(heights):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

heights = [2, 5, 6, 3, 4, 1]

预期输出

12