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

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.dtcms.com/a/299834.html

相关文章:

  • 字符串缓冲区和正则表达式
  • I/O 软件层次结构
  • 分布式数据库的分布透明性详解
  • 【前端】Vue 3 课程选择组件开发实战:从设计到实现
  • 如何从自定义或本地仓库安装 VsCode 扩展
  • 手写PPO_clip(FrozenLake环境)
  • 统计学08:概率分布
  • 面试实战,问题十二,Spring Boot接收和处理HTTP请求的详细原理,怎么回答
  • AI 编程工具 Trae 重要的升级。。。
  • 二维数组相关学习
  • 栈----3.字符串解码
  • 论文阅读-RaftStereo
  • 2025中国GEO优化白皮书:AI搜索优化趋势+行业数据报告
  • 应急控制HMI的“黄金10秒”设计:紧急场景下的操作路径极速简化技术
  • 嵌入式硬件篇---有线串口通信问题解决
  • PHP语法高级篇(六):面向对象编程
  • MyBatis-Plus 核心注解详解:从表映射到逻辑删除的全方位指南
  • C++/CLI vs 标准 C++ vs C# 语法对照手册
  • 9.3 快速傅里叶变换
  • 深度解析 noisereduce:开源音频降噪库实践
  • 深入理解Redission释放锁过程
  • Blender入门笔记(一)
  • 利用RAII与析构函数避免C++资源泄漏
  • 基于DataX的数据同步实战
  • 中电建路桥集团有限公司重大项目管理办公室成立
  • 【安全漏洞】网络守门员:深入理解与应用iptables,守护Linux服务器安全
  • Linux 如何统计系统上各个用户登录(或者登出)记录出现的次数?
  • Ubuntu安装node-red
  • 磁悬浮轴承转子不平衡质量控制策略设计:原理、分析与智能实现
  • C/C++中常量放置在比较操作符左侧