leetcode 739. Daily Temperatures 每日温度

题目描述

根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。

题解

数组stack作为栈,通过append和切片模拟入栈出栈操作

  1. 迭代数组T
  2. 数组T的索引0入栈
  3. 迭代的值大于栈顶索引的值,即v > T[stack[len(stack)-1]],则栈顶元素出栈,并存入res
  4. 重复步骤3, 直到栈为空 或 v不大于T[stack[len(stack)-1]]
  5. 数组T迭代完毕,返回数组res

示例代码(go)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func dailyTemperatures(T []int) []int {
res := make([]int, len(T))
stack := make([]int, 0)
for i, v := range T {
for len(stack) > 0 {
if v > T[stack[len(stack)-1]] {
res[stack[len(stack)-1]] = i - stack[len(stack)-1]
stack = stack[:len(stack)-1]
} else {
break
}
}
stack = append(stack, i)
}
return res
}