• Python编程题21--每日温度


    题目

    给定一个非空整数列表 temperatures ,该列表依次记录了每日温度,请计算在每一天需要等几天才会有更高的温度,并将结果通过列表返回。

    说明:如果气温在这之后都不会升高,请在该位置用 0 来代替。

    例如:

    给定一个列表:[73, 74, 75, 71, 69, 72, 76, 73],返回结果:[1, 1, 4, 2, 1, 1, 0, 0]

    给定一个列表:[30, 25, 35, 32],返回结果:[2, 1, 0, 0]

    解释:

    [30, 25, 35, 32] 表示该列表记录了4日温度,第 1 日为30,第 2 日为25,第 3 日为35,第 4 日为32 ;

    [2, 1, 0, 0] 表示该列表每日需要等几天才会有更高的温度,第 1 日需要等 2 天后温度升高到35,第 2 日需要等 1 天后温度升高到35,第 3、4 日后温度都不会升高,所以都是 0

    实现思路1

    • 直接暴力破解
    • 第一层遍历设置当前温度的位置 i,第二层遍历设置当前温度之后的位置 j
    • 每次遍历时寻找出温度升高的下一天,然后通过下标计算得出相差的天数 j - i ,并跳出第二层循环

    代码实现

    def dailyTemperatures(temperatures):
        res = []
        for i in range(len(temperatures)):
            count = 0
            for j in range(i + 1, len(temperatures)):
                if temperatures[j] > temperatures[i]:
                    count += j - i
                    res.append(count)
                    break
            else:  # for ... else 只有在 for 中全部遍历完,且for中没有因 break 提前跳出循环时才执行else
                res.append(0)
        return res
    

    实现思路2

    • 借助 来实现
    • 用列表 res 表示返回的结果,并设置默认值为 [0] * len(temperatures),用列表 stack 表示栈,其用于存储当前温度的下标 i
    • 第一层 for 遍历 temperatures ,每次遍历都需把当前温度的下标 i 添加到 stack
    • 第二层用 while 循环 stack ,如果非空并且当前温度大于栈顶元素对应的温度,那么执行出栈,直到栈顶元素对应的温度大于当前温度
    • 每次 stack 执行出栈时,可以计算得出当前温度升高所需的天数 i - stack.pop()

    代码实现

    def dailyTemperatures(temperatures):
        res = [0] * len(temperatures)
        stack = []
        for i, cur in enumerate(temperatures):
            while stack and cur > temperatures[stack[-1]]: 
                index = stack.pop()
                res[index] = i - index
            stack.append(i)
        return res
    
    作者:wintest
    本文版权归作者和博客园共有,欢迎转载,但必须在文章页面明显位置给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    【Linux】iptables相关实践,原理及参数解释
    【Linux】解决Linux服务器内存不足问题
    【原】Linux环境下Shell调用MySQL并实现定时任务
    Nginx配置,413 Request Entity Too Large错误解决
    【MAC】Mac下部分常用的小工具
    好久不见
    HashMap工作原理(转载)
    Java中long和Long有什么区别 (转载)
    Explain in detail the steps/processes that occur from the moment you type a URL in a browser and hit enter
    Find Minimum in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/wintest/p/15450561.html
Copyright © 2020-2023  润新知