当前位置: 首页 > 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.lryc.cn/news/601126.html

相关文章:

  • MyBatis-Plus 通用 Service
  • 睡眠函数 Sleep() C语言
  • 缓存一致性:从单核到异构多核的演进之路
  • [RPA] 日期时间练习案例
  • 免费 PDF 转 Word 工具:无水印 / 支持批量转换,本地运行更安全【附工具下载】
  • Python day25
  • 数字化转型 - 企业数字化建设的几点思考
  • Redis的下载和安装(Linux)
  • 学习随笔录
  • SSH连接失败排查与解决教程: Connection refused
  • 不正确的 clone() 方法实现与修复方案
  • java--JDBC
  • 【Canvas技法】绘制正N角星
  • 【数据结构】二叉树初阶详解(二):实现逻辑与代码拆解(超详版)
  • 计算机中的单位(详细易懂)
  • CH341 Linux驱动 没有 /dev/ttyCH341USB0
  • MySQL 基本查询
  • 【408二轮强化】数据结构——线性表
  • 最优估计准则与方法(4)最小二乘估计(LS)_学习笔记
  • 最优估计准则与方法(5)加权最小二乘估计(WLS)_学习笔记
  • 尝试几道算法题,提升python编程思维
  • C语言中:形参与实参的那些事
  • 1. Qt多线程开发
  • PYTHON从入门到实践-15数据可视化
  • 方案C,version2
  • 主要分布在腹侧海马体(vHPC)CA1区域(vCA1)的混合调谐细胞(mixed-tuning cells)对NLP中的深层语义分析的积极影响和启示
  • 深度解析 noisereduce:开源音频降噪库实践
  • C 与 C++ 的区别:发展、特性及优缺点详解
  • 对比JS“上下文”与“作用域”
  • 秋招Day19 - 分布式 - 分布式设计