学习首页/数组算法/单调栈交互演示 · JavaScript

代码与动画 MONOTONIC STACK

单调栈.

保存尚未等到更高温度的日期,遇到更高温度时回填等待天数。

时间 O(n)空间 O(n)每日温度

原理与执行逻辑

栈保存尚未找到后续更高温度的日期下标。新温度高于栈顶时,当前日期就是栈顶日期首次遇到更高温度的位置,可以弹出并回填等待天数。

执行步骤

  1. 将答案初始化为 0,准备空栈。
  2. 读取当前温度,与栈顶下标对应的温度比较。
  3. 当前温度更高时持续弹栈,将答案写为当前下标减去弹出下标。
  4. 将当前下标入栈,扫描结束后保留未解决日期的答案 0。

关键理解

栈内下标递增、对应温度非递增。每个日期入栈一次、至多出栈一次,因此总操作数为线性量级;相等温度不能解决等待。

简短示例

[73, 71, 74] 中第 2 天到来时,先解决 71 的等待 1 天,再解决 73 的等待 2 天,答案为 [2, 1, 0]。

代码与执行动画

STEP 0 / 23
单调栈
function dailyTemperatures(a) {  const stack = [], answer = Array(a.length).fill(0);  for (let i = 0; i < a.length; i++) {    while (stack.length && a[i] > a[stack.at(-1)]) {      const previous = stack.pop();      answer[previous] = i - previous;    }    stack.push(i);  }  return answer;}
11 行 · 0 个片段标记
73T[0]74T[1]75T[2]71T[3]69T[4]72T[5]76T[6]73T[7]0天[0]0天[1]0天[2]0天[3]0天[4]0天[5]0天[6]0天[7]
当前数据正在操作已访问 / 命中标记 / 指针
0

初始化等待栈

上行是温度,中行是栈(下标:温度),下行是等待天数。

配置演示数据

应用后重新生成执行过程,可单步观察结果。

实现说明

单调栈的操作规则

栈保存下标,对应温度从栈底到栈顶非递增。每个下标入栈、出栈至多一次;没有更高温度的日期保留 0。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。