单调栈 · 每日温度

维护一个温度递减的栈,扫描到更高温度时批量结算答案——每个元素最多进出栈一次,总复杂度 O(n)。

单调栈
01 / 24 步
每日温度:73, 74, 75, 71, 69, 72, 76, 73。求每个位置要等几天出现更高温度。初始答案全 0,栈为空。 比较 0 · 交换 0
伪代码

				
					
					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(后面没有更高温度)
				
			
01 / 24
速度