zoukankan      html  css  js  c++  java
  • 栈的应用:每日温度

    题目描述:

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

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

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

    题目解析:

    对于输入 73,它需要 经过一天 才能等到温度的升高,也就是在第二天的时候,温度升高到 74 ,所以对应的结果是 1。

    对于输入 74,它需要 经过一天 才能等到温度的升高,也就是在第三天的时候,温度升高到 75 ,所以对应的结果是 1。

    对于输入 75,它经过 1 天后发现温度是 71,没有超过它,继续等,一直 等了四天,在第七天才等到温度的升高,温度升高到 76 ,所以对应的结果是 4 。

    对于输入 71,它经过 1 天后发现温度是 69,没有超过它,继续等,一直 等了两天,在第六天才等到温度的升高,温度升高到 72 ,所以对应的结果是 2 。

    对于输入 69,它 经过一天 后发现温度是 72,已经超过它,所以对应的结果是 1 。

    对于输入 72,它 经过一天 后发现温度是 76,已经超过它,所以对应的结果是 1 。

    对于输入 76,后续 没有温度 可以超过它,所以对应的结果是 0 。

    对于输入 73,后续 没有温度 可以超过它,所以对应的结果是 0 。

    具体代码如下:

    t = [73, 74, 75, 71, 69, 72, 76, 73]
    
    def daily_temp(tem):
        # 模拟一个递减栈,存放当天的索引
        stack = []
        # 结果列表,几天后气温才升高
        res = [0] * len(tem)
        # 循环整个列表
        for i in range(len(tem)):
            # 当栈不为空且当前天数的气温大于栈顶的气温时,计算栈顶那天过几天气温才会升高
            while stack and tem[i] > tem[stack[-1]]:
                res[stack[-1]] = i - stack[-1]
                # 计算完出栈
                stack.pop()
            # 栈为空或者没有超过的温度,入栈一个
            stack.append(i)
    
        return res
    
    if __name__ == '__main__':
        print(daily_temp(t))
    
    
  • 相关阅读:
    UIWindow简单介绍
    关于事件的小结
    iOS事件机制(二)
    iOS事件机制(一)
    深入浅出iOS事件机制
    关于UIBarItem和UINvigationController,UITabBarController关系
    动态加载实例NSSelectorFromString
    iOS-滑动显示广告效果
    自定义的TabBar
    iOS评论页面的简单思路
  • 原文地址:https://www.cnblogs.com/milesma/p/12461949.html
Copyright © 2011-2022 走看看