#84
Hard
单调栈

Largest Rectangle in Histogram

求柱状图中的最大矩形面积。

ArrayMonotonic Stack

题目定位

栈的作用是帮每根柱子找到左右两边第一个更小的边界,而这正是计算它能扩展到多宽所需的信息。

关键观察

一个柱子被弹出时,当前下标就是它右侧第一个更小柱子,而新的栈顶就是左侧第一个更小柱子。

目标复杂度

O(n) / O(n)

这题的解法思路怎么拆

1

栈的作用是帮每根柱子找到左右两边第一个更小的边界,而这正是计算它能扩展到多宽所需的信息。

2

一个柱子被弹出时,当前下标就是它右侧第一个更小柱子,而新的栈顶就是左侧第一个更小柱子。

3

先明确栈维护的是哪种“尚未解决”的关系。

4

只要单调性不被破坏,就持续压栈。

参考实现

Python
# Generic pattern template
stack = []
for i, value in enumerate(nums):
    while stack and nums[stack[-1]] < value:
        prev_index = stack.pop()
        # value is the next greater for prev_index
    stack.append(i)

常见坑点

warning

忘了用哨兵处理,导致尾部栈清理不完整。

warning

只看高度,不用索引追踪边界。

高频追问

在头尾加 0 哨兵为什么能简化代码?

为什么宽度要基于弹栈后的新栈顶来算?

继续刷相关题

先把 单调栈 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 84. Largest Rectangle in Histogram 题解思路 | Interview AiBox