题目
代码&思路
暴力解法-用例通过35/48
超时
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
L=[]
n=len(temperatures)
for i in range(n-1):
flag=0 # 这个更高温是否出现了
for j in range(i+1,n):
if temperatures[j]>temperatures[i]:
flag=1
break
if flag==0:
L.append(0)
else:
L.append(j-i)
# 最后一天之后不会再有最高温出现
L.append(0)
return L
栈运用
类似表达式求值,从左往右遍历temperatures,栈为空时则入栈。
否则对比当前遍历的温度和栈顶温度,如果当前遍历温度更大,则找到了栈顶温度所处天数的下一个更高温度,可以更新数据。之后当前栈顶出栈,以此类推。直到栈顶温度不小于当前遍历的温度,那么当前遍历的温度所在的天数入栈。
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
stack=[] # 记录第几天
n=len(temperatures)
L=[0]*n
for i in range(n):
if stack==[]:
stack.append(i)
else:
for day in reversed(stack):
if temperatures[day]<temperatures[i]:
L[day]=i-day
stack.pop()
else:
break
stack.append(i)
return L