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

LeetCode-栈-每日温度

image-20250520203051704

LeetCode-栈-每日温度

✏️ 关于专栏:专栏用于记录 prepare for the coding test


文章目录

  • LeetCode-栈-每日温度
    • 📝每日温度
      • 🎯题目描述
      • 🔍 输入输出示例
      • 🧩题目提示
      • 🧪AC
    • 🌟 总结

📝每日温度

🎯题目描述

  1. 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

🔗题目链接:每日温度

🔍 输入输出示例

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

示例 2:

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

示例 3:

输入: temperatures = [30,60,90]
输出: [1,1,0]xxxxxxxxxx 输入: temperatures = [30,60,90]输出: [1,1,0]输入:s = "(]"输出:false

🧩题目提示

  • 1 <= temperatures.length <= 105
  • 30 <= temperatures[i] <= 100

🧪AC

本题的关键在于找到当前温度后面第一个更高温度出现的天数。如果没有更高温度,则返回 0。

考虑一个**单调栈(Monotonic Stack)**的应用场景:

  • 我们使用一个栈来存放“尚未找到更高温度的索引”。
  • 当遇到比栈顶元素所代表温度更高的温度时,就意味着我们可以为栈顶元素“结账”,也就是算出它距离下一个更高温度的间隔。
  • 重复这个过程,直到栈为空或栈顶对应温度高于当前温度。

1、初始化结果数组 ans,长度与 temperatures 一致,初始值为 0。

2、创建一个栈 st,用于存储下标。

3、遍历数组中的温度值:

  • 如果当前温度 t 大于栈顶下标所对应的温度,则不断弹出栈顶,计算 ans[j] = i - j
  • 最后将当前下标压入栈中。

4、返回 ans

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {int n = temperatures.size();vector<int>ans(n);stack<int>st;for(int i = 0;i < n;i++){int t = temperatures[i];while(!st.empty()&&t > temperatures[st.top()]){int j = st.top();st.pop();ans[j] = i - j;}st.push(i);}return ans;}
};

stack<int> st: 栈中存放的是下标而不是温度,方便计算天数差。

while 循环检查当前温度是否能“解锁”栈中等待的温度。

  • 时间复杂度: O(n),每个元素最多被压入和弹出一次。

  • 空间复杂度: O(n),用于存储栈和答案数组。

🌟 总结

单调栈: 解决“下一个更大/更小元素”类问题的利器。

栈中保存的是索引,而不是值,以便随时计算天数间隔。

每个元素最多进栈和出栈一次,保证了时间效率。

❤️ 如果对你有帮助,别忘了点赞、收藏支持一下,我将持续更新更多高质量刷题笔记!
📘 点击查看 👉 算法笔记专栏:Prepare for the Coding Test

http://www.xdnf.cn/news/9341.html

相关文章:

  • 《Discuz! X3.5开发从入门到生态共建》第1章 Discuz! 的前世今生-优雅草卓伊凡
  • 界面控件DevExpress WinForms v24.2新版亮点:富文本编辑器功能全新升级
  • Java五种方法批量处理List元素全解
  • 【操作系统】内核态、用户态
  • [Python] 避免 PyPDF2 写入 PDF 出现黑框问题:基于语言自动匹配系统字体的解决方案
  • CS144 - LAB0
  • 文本编辑器vi的使用
  • SECS/GEM协议中Report ID、SV ID、CE ID与S2F33/S2F35/S2F37指令的关系及配置示例
  • 专业库室联管联控系统|门禁联管联控系统
  • Browser-use快速了解
  • 流光溢彩的数字长河:Linux基础IO,文件系统的诗意漫游
  • Google Play的最新安全变更可能会让一些高级用户无法使用App
  • 函数抓取图片microsoft excel与wps的区别
  • 【n-grams】基于统计方法的语言模型
  • 深入理解设计模式之中介者模式
  • 基于Springboot + vue3实现的图书管理系统
  • 【Mysql开启慢查询日志】
  • 泰迪杯特等奖案例深度解析:基于联邦时空图卷积网络的跨区域碳排放协同预测与优化系统
  • 详解Kubernetes Scheduler 的调度策略
  • Day04
  • python进程间通信
  • C++数据结构 : map和set的使用
  • 高精度微型导轨在3D打印机中有多重要?
  • 2024 CKA模拟系统制作 | Step-By-Step | 9、题目搭建-扩容deployment副本数量
  • 打破云平台壁垒支持多层级JSON生成的MQTT网关技术解析
  • 《数据结构笔记四》双链表:创建,插入(头插、尾插、中间任意位置插入),删除,遍历,释放内存等核心操作。
  • 释放生产力潜能 AI-Hub智能数据中枢引领企业数字化转型
  • 粒子群优化(Particle Swarm Optimization, PSO)
  • 大模型(7)——向量模型(向量化存储)
  • Science综述:光电超构器件