skip to content

Search

739每日温度

3 min read Updated:

每日温度题解

题目:

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

单调栈

对于这道题目可以这么理解:

  1. 先将暂时找不到更高温度的元素存起来。后续遇到新的元素,只需要和这些元素组中的元素进行比较。根据先后次序,存储元素的后续更高温度一定是当前元素。
  2. 为了使当前元素能够更快和元素组中的元素进行比较,可以考虑将元素组中暂时没有答案的元素有序排列。当前元素依次从最小元素比较,遇到相同的就退出,然后把自己加进去。新形成的元素组也是有序的。
  3. 这样子的数据结构注意到就是一个栈的结构。这样依次进行步骤,就可以得到解答。这就是单调栈。

具体步骤:

对于元素temperatures[i]

  1. 如果栈为空,直接将i入栈。
  2. 如果栈不为空,比较栈顶元素temperatures[stack.getLast()]和temperatures[i]的大小:
    • 如果temperatures[i] <= temperatures[stack.getLast()],则将i入栈。
    • 如果temperatures[i] > temperatures[stack.getLast()],则说明找到了栈顶元素的下一个更高温度。弹出栈顶元素,并计算天数差,将结果存入答案数组中。重复此过程,直到栈为空或栈顶元素大于等于当前温度。
  3. 将当前索引i入栈,继续处理下一个温度。