LeetCode 739. 每日温度
题目描述
思路分析
单调递减栈
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func dailyTemperatures(T []int) []int {
n := len(T)
answer := make([]int, n)
var stack []int // 单调栈
for i := 0; i < n; i++ {
// 当当前温度大于栈顶温度时,更新答案
for len(stack) > 0 && T[i] > T[stack[len(stack)-1]] {
index := stack[len(stack)-1] // 获取栈顶索引
stack = stack[:len(stack)-1] // 弹出栈顶元素
answer[index] = i - index // 计算天数差
}
stack = append(stack, i) // 将当前索引压入栈中
}
return answer
}
- 时间复杂度:O (n),其中 n 是气温列表的长度。
- 空间复杂度:O (n),用于存储栈和结果数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func dailyTemperatures(temperatures []int) []int {
n := len(temperatures)
res := make([]int, n)
var stack []int
for i := 0; i < n; i++ {
for len(stack) > 0 && temperatures[i] > temperatures[stack[len(stack)-1]] {
pre := stack[len(stack)-1]
stack = stack[:len(stack)-1]
res[pre] = i - pre
}
stack = append(stack, i)
}
return res
}
- 时间复杂度:O(n),每个元素最多入栈、出栈一次。
- 空间复杂度:O(n),用于存储栈和 res 结果数组。
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用