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减去之前日期索引j
            stack.append(i)
        return answer

        

时间复杂度:O(n)

空间复杂度:O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值