当前位置: 首页 > news >正文

Leetcode hot100 每日温度【中等】

法(一)动态规划

直觉就是用动态规划。既然是动态规划,分两步,第一步是定义dp问题,第二步是推导dp公式。

step01: 定义dp问题。很简单,刚刚好就是原题要的逻辑。dp[i]记录第一个比第i天高的温度要往后数几天

step02:dp公式怎么推呢?找几个温度,脑子演练一下,就推出来了。

比如这个例子:

[78,76,73,74,75,77]
[ 0, 4, 1, 1, 1, 0]

76如何得出4?就能拼出dp[i]=(j-i),以及下标的传递逻辑j=j+dp[j];
78如何得出0?

假如今天是第i天,首先大的值肯定在后面对吧,那么最先遍历的肯定是第i+1天,如果第i+1天就比第i天高,那么dp[i]=(i+1)-i=1,不用往后找了。如果低于或等于呢?那下一个要比对的不是i+2,而是去对比第一个比第i+1天温度高的,也就是第i+1+dp[i]天,同时也是第i天后面所有温度里第一个比第i+1天高的,这样想就明白了——不会“跳过去第1高的去找第2高的”。如果传递式寻找的过程中遇到了dp[j]=0,那么不用往下传递了,dp[i]=0。

class Solution { public int[] dailyTemperatures(int[] temperatures) { //初始化 int[] dp=new int[temperatures.length]; dp[temperatures.length-1]=0; for(int i=temperatures.length-2;i>=0;i--){ int j=i+1; //从i+1天开始尝试找下一个最大值 while(j<=temperatures.length-1){ //1.=====第j日的温度>第i日的温度,相当于找到了 if(temperatures[j]>temperatures[i]){ //找到了,退出循环 dp[i]=(j-i); break; //2.=====第j日的温度<=第i日的温度 }else{ //2.1 =====第j日以后没有更高的温度了 if(dp[j]==0){ //确认找不到了,退出循环 dp[i]=0; break; } //2.2 ======第j日以后还有更高的温度 j=j+dp[j]; //下标:传递式寻找,类似于“依赖的依赖” } } } return dp; } }

法(二)单调栈

这个题在leetcode被划入了单调栈的分类里,所以借此机会学一下单调栈。

单调栈 = 始终保持栈内元素单调递增 或 单调递减 的栈。

单调栈最大价值:快速找「左边 / 右边 第一个比自己大 / 小的元素」,正好对应这个题。

单调递减栈的规则:

当前元素<=栈顶元素,满足递减,入栈

当前元素>栈顶元素,弹出栈顶元素.继续比较下一个栈顶元素,直到栈顶元素<=当前元素或者栈空

class Solution { public int[] dailyTemperatures(int[] temperatures) { int length = temperatures.length; int[] result = new int[length]; //栈里存的是temperatures的下标,而不是温度 Deque<Integer> st = new LinkedList<>(); //初始化 st.push(0); int i=1; while(i<length){ if(temperatures[i]<=temperatures[st.peek()]){ st.push(i); }else{ while(!st.isEmpty()&&temperatures[st.peek()]<temperatures[i]){ int j=st.peek(); result[j]=i-j; st.pop(); } st.push(i); } i++; } //最后栈里剩下的,都是没有比他们大的,挨个置0 while(!st.isEmpty()){ result[st.pop()]=0; } return result; } }
http://www.jsqmd.com/news/730881/

相关文章:

  • 语义视频生成技术:从CLIP到动态优化的实践指南
  • 终极指南:如何利用Color Thief实现数字图像色彩特征的区块链存证
  • 企业云盘私有化部署避坑指南:技术团队实战七坑
  • 从URDF模型到可动机械臂:手把手教你用MoveIt! Setup Assistant配置六轴机械臂规划组
  • 终极字体美化指南:用MacType让Win11文字显示效果翻倍提升!
  • 如何在3分钟内完全免费解锁WeMod专业版功能
  • 如何快速上手PostHog:开发者必备的产品分析与用户行为追踪工具完全指南
  • 从 “查重红飘” 到 “终稿过审”:paperxie 如何用双流程,解决本科论文最头疼的两道坎
  • 大模型知识遗忘难题:KORE双通道解决方案解析
  • Spotube用户反馈处理全攻略:如何高效提交问题并获得快速响应
  • Keil和IAR调试HardFault的隐藏技巧:除了打断点,你还能这样‘看’堆栈
  • 从21569到21593:双核ADSP开发中FIRA加速器驱动避坑实战(附完整代码)
  • 告别进程间数据打架:用Python posix_ipc和信号量搞定共享内存同步(附完整代码)
  • 医疗R语言数据挖掘速成课:7天掌握ADaM建模、AE信号检测与R Markdown自动化报告生成
  • 2026细花白麻权威测评:源头工厂/厂矿一体/直供厂家实力排名分析 - 匠言榜单
  • 武商一卡通秒回收平台推荐:安全、便捷、超快速! - 团团收购物卡回收
  • 如何实现高效分布式数据处理:多节点训练的datasets终极解决方案
  • 抖音内容保存三部曲:从链接到本地,让创作素材触手可得
  • 28nm FPGA低功耗设计技术解析与实践
  • 终极Spotify个性化指南:使用spicetify-cli打造专属音乐体验
  • 深圳市CPPM官方报名中心授权机构及联系方式 - 众智商学院课程中心
  • 体育场地施工多少钱一平?为什么报价差异这么大 - 长华体育
  • 企业云盘高可用架构:主备切换、负载均衡与健康检查实战
  • Websoft9故障排除手册:常见问题及解决方案大全
  • LaTeX公式一键转换Word:科研工作者的终极效率工具
  • AST智能代码对比工具agpair:超越文本diff的代码审查利器
  • BuildRoot集成RTL8822CE蓝牙驱动:手动补丁与自动化配置的权衡与实践
  • Uppy动态配置终极指南:5个步骤实现上传参数智能适配环境
  • Taotoken 的 API Key 管理与访问控制功能保障企业应用安全
  • 终极指南:SVGR与Prettier集成打造完美SVG组件开发体验