思路
s:代表当前温度的下一个温度更高是几天之后,初始化为-1
t:用来存放温度下标,初始化:第一个温度入栈
遍历:
从第二个温度开始,如果当前温度大于t[-1]位置的温度,则说明找到t[-1]位置温度的下一个更高温度,则修改对应的s
若当前温度小于t[-1]位置温度,说明温度比t[-1]位置温度还低,入栈,继续遍历找比它高的温度
若t=[],说明当前温度高于此位置前的所有温度(即当前位置之前的温度都找到了自己与之的最高温度)。当前温度入栈
遍历结束后,对于s[i]==-1:说明找不到与之对应最高温度,则赋值为0
class Solution(object):
def dailyTemperatures(self, temperatures):
"""
:type temperatures: List[int]
:rtype: List[int]
"""
#超限
# t =[]
# for i in range(len(temperatures)-1):
# flag=True
# for j in range(i+1,len(temperatures)):
# if temperatures[j]>temperatures[i]:
# t.append(j-i)
# flag=False
# break
# if flag:
# t.append(0)
# #最后一个
# t.append(0)
# return t
#方法二:栈
s = [-1]*len(temperatures)
t=[]
#存放下标,第一个温度先入栈
t.append(0)
for i in range(1,len(temperatures)):
while len(t)>0 and temperatures[t[-1]]<temperatures[i]:
s[t[-1]]=i-t[-1]
t.pop()
t.append(i)
n=s.count(-1)
if n!=0:
j =0
while j<len(s) and n>0:
if s[j]==-1:
s[j]=0
n-=1
j+=1
return s