每日温度问题的单调栈解法

每日温度问题的单调栈解法

作者:Elara发布时间:2026-07-22 12:21阅读时长:18 分钟阅读次数:12
常见问答
Q
为什么这道题适合用单调栈来做?

我在处理每日温度时,怎样判断当前这一天之后更高温度出现的位置?用单调栈相比暴力遍历有什么优势?

A

单调栈能高效记录“还没找到更高温度”的日期

这道题适合用单调栈,是因为每个位置都需要寻找右侧第一个比自己大的元素。单调栈可以维护一个递减序列的下标集合,当遇到更高温度时,就能一次性解决多个还在等待答案的日期。这样做的时间复杂度是 O(n),比逐个向右查找的 O(n^2) 更高效。

Q
栈里存的是温度值还是日期下标?

如果我想实现每日温度的单调栈算法,栈中到底应该保存什么信息,保存温度值会不会更方便?

A

通常保存下标,方便计算等待天数

在每日温度问题中,栈里更适合保存下标而不是温度值。因为题目需要的是“还要等多少天”,这个结果要通过当前下标减去栈顶下标来计算。只保存温度值虽然能判断大小关系,但无法直接得到距离,因此保存下标更实用。

Q
单调栈在遇到更高温度时是怎么更新答案的?

当遍历到一个新的温度,栈中的哪些日期会被处理,答案是怎样填入结果数组的?

A

新温度会持续弹出较低温度对应的日期

当遍历到一个新的温度时,只要它比栈顶对应的温度更高,就说明栈顶那个日期找到了答案。此时把栈顶下标弹出,并用当前下标减去被弹出的下标,得到需要等待的天数。这个过程会持续进行,直到栈为空或者栈顶温度不再小于当前温度。

Q
如果温度一直不升高,单调栈还能工作吗?

遇到一串持续下降或相同的温度时,算法会不会失效,结果该怎样处理?

A

即使温度不升高,算法也能正确保留等待中的日期

如果后面的温度一直没有升高,栈中的日期会一直保留在栈里,表示它们还没有找到更高温度。等遍历结束后,这些位置在结果数组中保持默认值 0 就可以,表示之后没有更暖和的一天。单调栈的设计正是为了让这种情况也能自然处理。

* 文章含AI生成内容