739.每日温度
https://leetcode-cn.com/problems/daily-temperatures/
一、栈
类似496. 下一个更大元素 I的解法二。用一个栈存储待求的日期下标。i遍历T数组,遇到比栈顶温度高的就出栈,并计算相差天数,写入res
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
n = len(T)
if n == 1:
return [0]
res = [0] * n #结果集,初始为0
stack = [0] #栈,存储下标
for i in range(1, n):
#比较当前温度与栈顶下标指示的温度
while len(stack) > 0 and T[i] > T[stack[-1]]:
res[stack[-1]] = i - stack[-1] #计算差值
stack.pop()
stack.append(i) #每次入栈一个
return res
二、单调栈
类似496. 下一个更大元素 I的解法三
i从后往前反向遍历,元素下标依次入栈,构造一个单调栈,保持栈底最大,栈顶最小。每次i与栈顶比较,若t[i]大于等于栈顶则弹栈,即栈顶是最靠近i的最大元素,再计算下标差值即可
class Solution:
def dailyTemperatures(self, t) :
n = len(t)
res = [0]*n
stack = []
for i in range(n-1, -1, -1): #元素依次入栈
#栈非空,且扫到不小于栈顶的,则弹栈
while stack and t[stack[-1]] <= t[i]:
stack.pop()
res[i] = stack[-1] - i if stack else 0
stack.append(i)
return res
最后更新于