队列解法:(速度慢)
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
len_T = len(T)
from collections import deque
result = deque([0])
stack = deque([(len_T - 1, T[-1])])
index = len_T - 2
while(index >= 0):
flag = True
while(flag):
temp = T[index]
if temp < stack[0][1]:
result.appendleft(stack[0][0] - index)
stack.appendleft((index, temp))
flag = False
else:
stack.popleft()
if not stack:
result.appendleft(0)
stack.appendleft((index, temp))
flag = False
index -= 1
return result
更新了栈解法:
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
len_T = len(T)
result = [0] * len_T
stack = []
for index in range(len_T - 1, -1, -1):
while stack and T[index] >= T[stack[-1]]:
stack.pop()
if not stack:
stack.append(index)
result[index] = 0
continue
result[index] = stack[-1] - index
stack.append(index)
return result
思想是列表从后往前维护一个温度递减的栈,当新的温度大于栈顶温度时弹出栈顶,直到温度小于栈顶温度或栈为空时将新温度压入。