题目描述
思路解析动画文字版
如果对每一天都往后找更暖的一天,很多位置会被反复看。
新温度比栈顶高时,栈顶那天终于等到了答案,弹出并填天数。
第 0 天 73 · 入栈等待:柱状图比纯栈更直观:73 还没有看到右边更高温,先入栈等待。
第 1 天 74 · 弹出 73:74 比栈顶 73 高,所以第 0 天等到了答案:1-0=1。先弹出 0。
第 1 天 74 · 自己入栈:结算完别人后,74 自己也要等右边更高温,于是下标 1 入栈。弹和压分开,动作不会挤成一帧。
第 2~4 天 · 75 弹掉 74,71、69 依次入栈:快进三天。第 2 天 75 比 74 高,第 1 天等到答案、74 弹出,75 自己入栈。接着第 3 天 71、第 4 天 69 一个比一个低,谁也没遇到更高温,依次压进栈里。现在栈里从底到顶是 75、71、69,温度递减——等会儿一个高温会把它们连着叫醒。
第 5 天 72 · 先弹 69:来到 72,先看栈顶 69。72 更高,所以第 4 天答案是 1,弹出 4。
第 5 天 72 · 再弹 71:弹完 69 后继续看新的栈顶 71。72 也比 71 高,所以第 3 天答案是 5-3=2。
第 5 天 72 · 弹完后自己入栈:72 把 69、71 都结算完后,自己也没遇到更高温,于是下标 5 入栈。现在栈里从底到顶是 75、72,又是严格递减——这正是下一个高温能连弹的前提。
第 6 天 76 · 连续结算 72 和 75:最后 76 继续结算:先让 72 得到答案 1,再让 75 得到答案 4。连续弹栈现在能逐步看出来。
关键帧慢放 · 一个高温叫醒一串等待者:回放刚才那一下,看清单调栈的灵魂。来到第 6 天 76,栈里从底到顶是 75、72,温度严格递减——这是不变量。76 比栈顶 72 高,结算第 5 天:6 减 5 等于 1,弹出;再看新栈顶 75,76 还是更高,结算第 2 天:6 减 2 等于 4,再弹。一个高温用一个 while 循环,把压在它下面、所有比它低的等待者一次性叫醒——这就是 while 不能写成 if 的原因。
叫醒一个,就能立刻填出那天的等待天数。
边界三连:单日、相等、连续升温,正好测出弹栈条件。
雷区实演 · 相等不能弹:[30,30] 第二天不是更暖,只是相等。第 0 天答案仍然是 0。
三个高频追问。第一,栈为什么单调递减:栈里都是还没等到更高温的日子,越往顶温度越低。第二,为什么是 while 不是 if:一个高温可能一次叫醒下面好几个等待者,要循环弹。第三,它和「下一个更大元素」是同一道题,只是答案从值换成了距离。
这题学完不要乱跳,下一步去 对应专题 连刷同类题;卡住时用 AI 答疑追问“为什么这一步成立”,比只背答案更稳。
参考代码
class Solution: def dailyTemperatures(self, temperatures): ans = [0] * len(temperatures) st = [] for i, t in enumerate(temperatures): while st and temperatures[st[-1]] < t: j = st.pop() ans[j] = i - j st.append(i) return ans复杂度
- 时间复杂度:O(n),每个下标最多入栈一次、出栈一次
- 空间复杂度:O(n),最坏温度递减,所有下标都在栈里
可套用的代码模板
这一步不是复读 每日温度 的参考答案,而是抽出这题真正能迁移的骨架;换题时先判断状态/容器含义,再填核心分支。
# 单调栈模板:当前元素负责结算左边等待的人stack = [] # 通常存下标,不只存值for i, x in enumerate(nums): while stack and x 能让 nums[stack[-1]] 得到答案: j = stack.pop() ans[j] = i - j 或 用 i/j 计算贡献 stack.append(i)return ans易错点
面试追问把动画讲成自己的话
追问栈为什么是单调递减的?
追问为什么用 while 而不是 if?
追问和「下一个更大元素」(Next Greater Element) 什么关系?
这道题到这就讲完了。动画和文字是同一套思路——别光看,关掉页面自己默写一遍。然后顺着主线继续:
车队
LeetCode 853 · 中等 · 沿着 栈 继续往下推进
把这道题真正学会,再走
图解算法年卡 ¥99 /年
- ✓本题每步动画的吴师兄语音讲解(全站陆续覆盖)
- ✓小欧带 8 步通关训练——追问到不看答案也能写对、能 30 秒讲给面试官听
- ✓学习报告,记录每道题的掌握程度
76k+ GitHub Star · 吴师兄开源图解算法,几十万开发者在看的算法讲解
想成体系刷透这类套路?去图解算法专题