【leetcode】739. 每日温度

62 阅读1分钟

leetcode-739.png

单调栈解法

这是这道题最常用的解法,利用栈来帮助追踪温度变化。

算法思路

  1. 使用栈存储温度的下标。当遇到比栈顶温度高的元素时,弹出栈顶,计算两个下标的差值即为等待的天数。
  2. 栈内保持从栈底到栈顶递减的顺序。
var dailyTemperatures = function (temperatures) {
    let stack = []
    let res = new Array(temperatures.length).fill(0)
    for (let i = 0; i < temperatures.length; ++i) {
        // 循环将stack容量减少
        while (stack.length > 0 && temperatures[i] > temperatures[stack[stack.length - 1]]) {
            let idx = stack.pop()
            res[idx] = i - idx
        }
        stack.push(i)
    }
    return res
};