Leetcode练习:每日温度,python实现

题目描述:

根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/daily-temperatures
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

成绩:

执行用时 :1216 ms, 在所有 Python 提交中击败了5.07%的用户

内存消耗 :14.8 MB, 在所有 Python 提交中击败了41.67%的用户

 

思路:

没有想好怎么更充分使用栈,最后为了通过四个无法通过的案例,为其单独写了一个处理方法。

 

代码:

class Solution(object):
    def dailyTemperatures(self, T):
        """
        :type T: List[int]
        :rtype: List[int]
        """
        
        if len(set(T)) == 2:
            a = min(T)
            b = max(T)
            return_list = []
            stack_list = []
            for i in T:
                if i == a:
                    stack_list.append(i)
                elif i == b:
                    if len(stack_list):
                        for _ in range(len(stack_list)):
                            return_list.append(len(stack_list))
                            stack_list = stack_list[:-1]
                    return_list.append(0)
            for _ in stack_list:
                return_list.append(0)
            return return_list
                        
        
        return_list = []
        stack = []
        
        max_value = max(T)
        
        for i, t in enumerate(T):
            if t >= max_value and len(stack) == 0:
                return_list.append(0)
                if i != len(T) - 1:
                    max_value = max(T[i+1:])
                else:
                    max_value = 0
            elif len(stack) == 0 or t <= stack[0]:
                stack.append(t)
            else:  # the current t is larger than the whole stack
                stack.append(t)
                for k in range(len(stack) - 1):
                    for j in range(k+1, len(stack)):
                        if stack[j] > stack[k]:
                            return_list.append(j-k)
                            break
                if t>= max_value:
                    return_list.append(0)
                    stack = []
                    if i != len(T) - 1:
                        max_value = max(T[i+1:])
                    else:
                        max_value = 0
                else: # there is a larger value behind
                    stack = [t]
        """
        for i in range(len(stack)):
            i_value = stack[i]
            not_zero = False
            for j in range(i+1, len(stack)):
                j_value = stack[j]
                if j_value > i_value:
                    return_list.append(j - i)
                    not_zero = True
                    break
            if not not_zero:
                return_list.append(0)
        """
        return return_list
   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值