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

hot100-每日温度

739. 每日温度 - 力扣(LeetCode)

自己用的双指针,但是超时了,本题的知识点是单调栈

怎么理解单调栈的这个过程,当然,这个单调可以是单调递增,也可以是单调递减。压栈的逻辑是这样的,如果当前访问到的元素比栈顶小或者相等,就压入栈中。一直这样那么向栈底的方向就是递增的。如果当前访问到的元素大于栈顶,二者索引相减就是答案,并弹出栈顶,把这元素的索引再压进去。比如访问到721时,那么栈的元素(其实应该是索引,跳过从开始的过程)应该是

69->71->75(栈底),下一个访问大72时,72大于69,就可以直接相减弹出69,变成71->75,然后72大于71,相减弹出71,71小于75,变成71->75,访问大76的时候,就可以把75弹出了。

个人理解逻辑:那75举例子,它后面的元素都比他小,所以都不符合题目的要求,那么就继续访问,当访问到一个比较大的时候,就对栈顶进行处理,符合就弹出就继续处理,直到75成为栈顶的时候,说明它后面的元素(访问过的都不符合)都已经干掉了,保证下一个访问的元素一定比75成为栈顶之前时75前面的元素大(实际上就是对他们处理了),并可能小于等于大于75,如果大于,那么就是第一次出现比他它的(因为比他小就压入),因为再比他大的数字第二次出现之前就已经把75弹走了

class Solution {
public:vector<int> dailyTemperatures(vector<int>& T) {// 递增栈stack<int> st;vector<int> result(T.size(), 0);st.push(0);for (int i = 1; i < T.size(); i++) {if (T[i] < T[st.top()]) {                       // 情况一st.push(i);} else if (T[i] == T[st.top()]) {               // 情况二st.push(i);} else {while (!st.empty() && T[i] > T[st.top()]) { // 情况三result[st.top()] = i - st.top();st.pop();}st.push(i);}}return result;}
};

 

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

相关文章:

  • Python爬虫实战:诗词名句网《三国演义》全集
  • obd运维OceanBase数据库的常见场景
  • 0基础法考随手笔记 03(刑诉05 刑事证据与证明+06 强制措施)
  • 【Canvas技法】绘制正N角星
  • 机器学习的工作流程
  • Windows 平台源码部署 Dify教程(不依赖 Docker)
  • 手写PPO_clip(FrozenLake环境)
  • 【LeetCode 热题 100】79. 单词搜索——回溯
  • 电子电气架构 --- 车载软件交样评审流程
  • Java面试题及详细答案120道之(041-060)
  • 排序算法,咕咕咕
  • 进制定义与转换详解
  • vcpkg如何交叉编译
  • HCLP--MGER综合实验
  • 数据结构习题--删除排序数组中的重复项
  • 详解力扣高频SQL50题之1084. 销售分析 III【简单】
  • Python点阵字生成与优化:从基础实现到高级渲染技术
  • 数据恢复与备份
  • 快速入门Linux操作系统(一)
  • 立式加工中心X-Y轴传动机械结构设“cad【6张】三维图+设计说明书
  • 进阶数据结构:用红黑树实现封装map和set
  • 学习嵌入式的第三十一天-数据结构-(2025.7.23)网络协议封装
  • 数据中心-时序数据库InfluxDB
  • 掌握Gemini-2.5:现代AI开发中实用应用的综合指南
  • 二次函数图像动画展示
  • 在Power Automate Desktop中执行PowerShell获取SharePoint online某个文件夹的用户权限列表
  • excel删除重复项场景
  • 算法竞赛阶段二-数据结构(35)数据结构单链表模拟实现
  • Node.js 模拟 Linux 环境
  • 【每天一个知识点】GAN(生成对抗网络,Generative Adversarial Network)