图解算法通识讲义线性结构

单调栈与结构化消除模型

核心心智模型:后进先出,淘汰弱者;维护单调梯队,为每一个元素寻找下一个更大/更小元素。

核心交互式算法图解演练沙盒
单调栈模型

每日温度与单调栈下一个更大元素演算

步骤 1 / 4
输入温度序列 Temperatures
73
[0]
74
[1]
75
[2]
71
[3]
69
[4]
72
[5]
76
[6]
73
[7]
等待天数计算结果 Result
-
-
-
-
-
-
-
-
单调栈容器 (FILO Stack)保持栈顶最小
下标 [0]温度 73°栈顶

入栈:温度 73 (下标 0) 入栈,单调递减栈维护未找到更高温度的下标。

关键操作与时空复杂度速查对照表
操作 / 算法阶段平均时间最坏时间空间复杂度核心底层机制
单调栈全量处理O(N)O(N)O(N)每个元素至多进出栈一次,总体平摊线性时间。
template.java
int[] res = new int[temperatures.length];
Deque<Integer> stack = new ArrayDeque<>();
for (int i = 0; i < temperatures.length; i++) {
    while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {
        int prevIdx = stack.pop();
        res[prevIdx] = i - prevIdx;
    }
    stack.push(i);
}
return res;
解题核心心法提炼
  • 单调递增栈常用于寻找下一个更小元素与柱状图中最大矩形面积。
  • 栈内通常推荐存「元素下标」而非「元素数值」,因为下标既能获取跨度宽度,又能随时反查数值。
  • 最小栈(MinStack)常使用辅助栈同步维护当前历史前缀最小值。
常见踩坑警示与避坑指南
  • 单调栈判定是 while 循环持续弹出,误写成 if 导致漏弹元素。
  • 计算宽度时遗漏了栈为空时的特殊边界处理(推荐引入哨兵元素)。

对应 Hot 100 实战题目突围

原理已掌握!立即进入沉浸式工作台开始实战演练,强化代码肌肉记忆

查看全部题目