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

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

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

解题思路

典型的单调栈问题。关于单调栈的问题,我们之前也碰到过Leetcode 84:柱状图中最大的矩形(超详细的解法!!!)。我们这里的问题就是要找到大于当前元素的第一个元素的位置,所以我们可以先将temperatures反转,然后我们通过建立一个严格单调递减的栈。如

首先将temperatures反转就变成了[73, 76, 72, 69, 71, 75, 74, 73]

假设我们现在考虑71,此时我们的栈中存有[73,72,69]

我们发现71大于栈顶元素,所以我们要将69出栈,然后将71压入。并且我们此时可以知道比71大的第一个元素就是72,所以此时,我们只需要通过72.index减去71.index就可以得到结果,最后我们得到所有结果后再将结果反转即可。

class Solution:def dailyTemperatures(self, T):""":type T: List[int]:rtype: List[int]"""stack = list()T.reverse()res = []for i, val in enumerate(T):while stack and T[stack[-1]] <= val:stack.pop()if stack:res.append(i - stack[-1])else:res.append(0)stack.append(i)res.reverse()return res

稍微简化一下代码

class Solution:def dailyTemperatures(self, T):""":type T: List[int]:rtype: List[int]"""res = [0] * len(T)stack = []for i in range(len(T) - 1, -1, -1):while stack and T[i] >= T[stack[-1]]:stack.pop() if stack:res[i] = stack[-1] - istack.append(i)return res

知道这种思路后,我们可以很快的写出更加简洁的做法。我们不需要将T.reverse(),而是直接建立一个非严格单调递减的栈,当我们碰到一个元素大于栈顶元素的时候,我们知道此时这个元素一定是离栈顶元素最近的那个最大值的点,我们只要测试记录两者之间的位置距离就好啦。

class Solution:def dailyTemperatures(self, T):""":type T: List[int]:rtype: List[int]"""res = [0] * len(T)stack = []for i, t in enumerate(T):while stack and T[stack[-1]] < t:cur = stack.pop()res[cur] = i - curstack.append(i)return res

reference:

https://leetcode.com/problems/daily-temperatures/discuss/136017/Elegant-Python-Solution-with-Stack

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!

Leetcode 739:每日温度(超详细的解法!!!)相关推荐

  1. 184、【栈与队列】leetcode ——739. 每日温度(C++版本)

    题目描述 参考文章:739. 每日温度 解题思路 (1)暴力法 每次遍历到一个数时,就再开辟一个变量找此数后面第一个大于它的数,找到则添加,没找到则返回0. class Solution {publi ...

  2. 2020-06-11 LeetCode 739 每日温度 C++

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

  3. leetcode 739. 每日温度 单调栈解法和暴力法及其优化 c代码

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

  4. LeetCode 739. 每日温度(单调栈)

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

  5. leetcode - 739. 每日温度

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

  6. Leetcode 739. 每日温度 (每日一题 20211014)

    请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度.如果气温在这之后都不会升高,请在该位置用 0 来代替.示例 1:输入: temperatures = [7 ...

  7. Leetcode 496:下一个更大元素 I(超详细的解法!!!)

    给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...

  8. 【LeetCode】【HOT】739. 每日温度(栈)

    [LeetCode][HOT]739. 每日温度 文章目录 [LeetCode][HOT]739. 每日温度 package hot;import java.util.ArrayDeque; impo ...

  9. Leetcode 1162:地图分析(超详细的解法!!!)

    你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了.其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗 ...

最新文章

  1. ubuntu 16.0.4 配置 tensorflow-gpu 1.1.0
  2. python2使用openpyxl_使用openpyxl for Python2.6有些困难
  3. 黑莓 7290 快捷键
  4. 华为认证hcia含金量_华为hcna认证用处大吗 什么是hcna
  5. MapInfo mif/mid文件说明
  6. python列表获取最后一项_如何在Python中获取列表的最后一项?
  7. 初学Python——协程
  8. 深度学习之神经网络基础(1)——感知器,S型神经元,梯度下降法,神经网络架构
  9. 文献阅读:Improving neural networks by preventing co-adaptation of feature detectors
  10. linux man 中文 mac,技术|MAC 系统中显示中文MAN手册
  11. java的字典序排序_java字典序排序
  12. 如何黑入安卓手机(ezsploit)
  13. 通过NFS挂载根文件系统——TQ2440
  14. html ajax 图片上传,Ajax实现图片上传并预览功能
  15. Android中常见五种布局管理器——RelativeLayout、LinearLayout、FrameLayout、TableLayout、GridLayout
  16. 安邦信AMB100系列通用变频器通过PID功能实现恒压供水的基本方法
  17. 我们为什么要学习JAVA?
  18. UI设计师ps的使用,产品经理
  19. 制作学术PPT和演讲的要点
  20. 多媒体信息检索技术简介

热门文章

  1. MATLAB永磁同步电机电角度,永磁同步电动机矢量控制
  2. 淘某某宝app接口最新xsign算法分析
  3. 【强化学习论文合集】二十.2019机器人与自动化国际会议论文(ICRA2019)
  4. ios12控制中心打不开相机和计算机,如何修复iPhone 12相机无法正常工作?
  5. oracle oam nginx,如何基于 OAM 编写一个扩展 Trait?
  6. 苹果7手机严重卡顿_为什么安卓机用久了会卡顿,苹果却不会?这一点决定手机卡不卡!...
  7. 【190223】基于MWP的VC++所播放器源程序源代码
  8. 华为路由器CVE-2017-17215-HG532
  9. Python:初步完成IE浏览器的查询、点击和文件下载
  10. NB-IoT从原理到实践 学习笔记 Part 13-19 NRS,NPBCH,NPDCCH,NPDSCH,NPRACH,NPUSCH,DMRS