python-leetcode 71.每日温度
题目:
给定一个整数数组 temperatures
,表示每天的温度,返回一个数组 answer
,其中 answer[i]
是指对于第 i
天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0
来代替。
可以理解为对于数组中的每一个元素,找到下一个比它大的元素的位置,并计算他们的距离,如果不存在这样的元素,则距离为0
1.初始化:
stack:用于存储温度的索引
answer:初始化为全0的数组
2.遍历:
对于每个温度temp和其索引i:
如果栈不为空且temp大于栈顶索引对应的温度:
弹出栈顶索引j,并设置answer[j]=[i-j]
将当前索引i压入栈中。
3.返回结果1
class Solution(object):def dailyTemperatures(self, temperatures):""":type temperatures: List[int]:rtype: List[int]"""stack=[]answer=[0]*len(temperatures)for i ,temp in enumerate(temperatures): #遍历温度列表,i是当前日期索引,temp是当前温度值while stack and temp>temperatures[stack[-1]]: #当栈不为空且当前温度高于栈顶日期对应的温度时,进入循环j=stack.pop() #弹出栈顶元素j(即找到了比temperatures[j]更高的温度)answer[j]=i-j#当前索引i减去之前日期索引jstack.append(i)return answer
时间复杂度:O(n)
空间复杂度:O(n)