stacked_bar_chart单调栈

单调栈题型:怎么识别、怎么讲、怎么练

单调栈的价值在于把大量“向左/向右找第一个更大或更小”压缩成一次扫描。每个元素都在问谁会最先打败它时,单调栈就是最合适的结构。

覆盖题量

25+

推荐起手

根据“谁应该还没找到答案”选择递增栈还是递减栈。

高频误区

只存值不存索引,导致距离和宽度信息丢失。

什么时候该想到这个模式

题目在找下一个更大、更小,或者最近边界元素。
每个元素都像是要往外扫,直到条件被破坏。
答案跟跨度、柱状图边界、等待天数这类信息有关。

下手前的检查清单

根据“谁应该还没找到答案”选择递增栈还是递减栈。
如果后面要算宽度或距离,栈里一定存索引。
先定义一个元素被弹出时代表什么。
主循环结束后,考虑栈里剩余元素该如何处理。

真正适合面试表达的解题步骤

1

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

2

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

3

当前元素一旦能解决前面的元素,就持续弹栈。

4

答案通常在弹栈那一刻被确定。

5

最后处理剩余元素的默认答案或边界。

常见变体

下一个更大 / 更小

最直接的单调栈模式。

边界宽度

为每个元素找到左右边界以计算宽度。

环形扫描

数组逻辑上是环时,需要两倍遍历。

模板预览

Python公开预览
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)

更像真实刷题路径的推荐题单

这组题不是随机罗列,而是按“先建立识别感,再补关键变体,最后上强度”去排,适合真的拿来做一轮 pattern 复习。

高频坑点

warning

只存值不存索引,导致距离和宽度信息丢失。

warning

相等元素时比较符号选错。

warning

环形数组题忘了第二轮遍历。

warning

柱状图题漏掉哨兵处理。

练习顺序建议

1

先做每日温度和下一个更大元素。

2

再刷柱状图最大矩形。

3

然后补环形数组变体。

4

最后再做用边界间接计数的高难题。

单调栈题型总结 | LeetCode 高频面试模式 - Interview AiBox