739. 每日温度

在这里插入图片描述
思路

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值