§05 线性结构
单调栈 · 每日温度
维护一个温度递减的栈,扫描到更高温度时批量结算答案——每个元素最多进出栈一次,总复杂度 O(n)。
单调栈
伪代码
1
// 每日温度:找每个位置右侧第一个更高温度的距离
2
stack = []
3
for i in 0..n-1:
4
while stack 非空 and T[i] > T[stack.top]:
5
j = stack.pop()
6
answer[j] = i - j // j 的答案
7
end while
8
stack.push(i) // 单调递减栈
9
end for
10
// 栈中剩余的下标答案为 0(后面没有更高温度)