#739
Medium
单调栈

Daily Temperatures

对于每天,求还要等几天才会升温。

对每一天,返回还要等多少天才会升温。这是最经典的“下一个更大元素”索引题。

ArrayMonotonic Stack

题目定位

每一天都在找右侧第一个严格更大的值,这正是最标准的单调栈触发条件。

关键观察

把尚未找到更高温度的下标放进递减栈;当前更高温度会一次性解决它后面所有更小温度。

目标复杂度

O(n) / O(n)

这题的解法思路怎么拆

1

维护一个单调递减栈,里面放还没找到更高温度的日期下标。

2

当更高温度出现时,它会依次解决栈顶所有更低温度的日期。

3

把这些下标弹出,并立刻计算等待天数。

4

等所有更低温度处理完,再把当前下标压栈。

拿一个例子顺一遍

1

例如 [73, 74, 75, 71, 69, 72, 76, 73]。

2

74 出现时解决 73,所以 answer[0] = 1;75 出现时解决 74,所以 answer[1] = 1。

3

后面的 72 会解决 69 和 71,再由 76 解决 72 和 75。

4

最后还留在栈里的下标,说明后面再也没有更高温度,因此答案保持 0。

参考实现

Python
def dailyTemperatures(temperatures: list[int]) -> list[int]:
    answer = [0] * len(temperatures)
    stack: list[int] = []

    for index, value in enumerate(temperatures):
        while stack and temperatures[stack[-1]] < value:
            previous = stack.pop()
            answer[previous] = index - previous
        stack.append(index)

    return answer

常见坑点

warning

只存温度值,不存下标,导致无法算等待天数。

warning

题目要求严格升温,却用了 <= 比较。

高频追问

为什么每个下标最多只会进栈和出栈一次?

如果改成下一个更低温度,单调性怎么变?

继续刷相关题

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

view_week回到模式页
LeetCode 739. Daily Temperatures 题解思路 | Interview AiBox