题目:
题解:
这个题使用最好使用单调栈,比暴力更优
栈底始终保持是最大值
要入栈的元素比栈底元素小,则直接入栈;
比栈顶(栈中最上面)的元素大,则小元素出栈,有出栈的就对应一个等待天数,出栈的元素对应的等待天数就为两数下标差(入-出 即 当前下标-栈顶下标),注意入栈的是温度对应的下标
初始化一个跟温度数组等长的全0数组,将计算出的下标差结果存入result数组中
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
result = [0] * len(temperatures)
# result=[0 for i in range(len(temperatures))]
stack=[]
for i in range(len(temperatures)):
# 栈不为空且当前温度大于栈顶元素时,计算下标差栈顶元素出栈,写入result
while stack and temperatures[i]>temperatures[stack[-1]]:
result[stack[-1]] = i-stack[-1]
stack.pop()
# 当前温度小于栈顶时,直接入栈
stack.append(i)
return result
result = [0] * len(temperatures)比result=[0 for i in range(len(temperatures))]用时短
草稿图