【代码随想录】Day58~Day60单调栈

news/2024/4/20 12:51:45/文章来源:https://blog.csdn.net/weixin_53043309/article/details/129259815

单调栈的作用

就是用一个栈来记录我们遍历过的元素

单调栈里存放元素下标i就可以了,如果要使用对应元素,直接T[i]就可以获取到

从栈头到栈尾-递增的话-栈里要加入一个元素i的时候,才知道栈顶元素在数组中右面第一个比栈顶元素大的元素是i

题目

LeetCode:739.每日温度

解法

将下标存放进单调栈中

当前遍历的元素和栈顶元素进行比较T[i]和T[st.pop()]

T[i]==T[st.pop()] 入栈

T[i]>T[st.pop()] 记录结果

T[i]<T[st.pop()] 入栈

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> st;vector<int> reulst(temperatures.size(),0);st.push(0);//放入第一个元素for(int i=1;i<temperatures.size();i++){if(temperatures[i]<temperatures[st.top()]) st.push(i);else if(temperatures[i]==temperatures[st.top()]) st.push(i);else{while(!st.empty()&&temperatures[i]>temperatures[st.top()]){reulst[st.top()]=i-st.top();st.pop();}st.push(i);}}return reulst;}
};

LeetCode:496.下一个更大

解法

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {vector<int> result(nums1.size(),-1); //结果数组的长度与1相等stack<int> st;if(nums1.size()==0) return result;unordered_map<int,int> umap;//对数组1进行处理 建立哈希表for(int i=0;i<nums1.size();i++){umap[nums1[i]]=i;}//用单调栈遍历数组2st.push(0);for(int i=1;i<nums2.size();i++){if(nums2[i]<nums2[st.top()])//小于 等于 都直接入栈st.push(i);else if(nums2[i]==nums2[st.top()]) st.push(i);else{//大于栈顶元素 处理结果while(!st.empty()&&nums2[i]>nums2[st.top()]){//判断元素是否出现过if(umap.count(nums2[st.top()])>0){int index=umap[nums2[st.top()]];result[index]=nums2[i];}st.pop();}st.push(i);}}return result;}
};

LeetCode:503.下一个更大元素II

用取模的过程模拟成环的遍历

for(i=0;i<nums.size()*2;i++){

i%nums.size()

}

class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {vector<int> result(nums.size(),-1);stack<int> st;st.push(0);//放入第一个元素for(int i=1;i<nums.size()*2;i++){if(nums[i%nums.size()]<=nums[st.top()]) st.push(i%nums.size());else{while(!st.empty()&&nums[i%nums.size()]>nums[st.top()]){result[st.top()]=nums[i%nums.size()];st.pop();}st.push(i%nums.size());}}return result;}
};

LeetCode:42.接雨水

class Solution {
public:int trap(vector<int>& height) {stack<int> st;st.push(0);int sum=0;//从1开始遍历所有柱子for(int i=1;i<height.size();i++){//如果当前遍历的元素(柱子)高度小于栈顶元素的高度,就把这个元素加入栈中,因为栈里本来就要保持从小到大的顺序(从栈头到栈底)if(height[i]<height[st.top()]){st.push(i);}//如果当前遍历的元素(柱子)高度等于栈顶元素的高度,要跟更新栈顶元素,因为遇到相相同高度的柱子,需要使用最右边的柱子来计算宽度。else if(height[i]==height[st.top()]){st.pop();st.push(i);}//如果当前遍历的元素(柱子)高度大于栈顶元素的高度,此时就出现凹槽了else{while(!st.empty()&&height[i]>height[st.top()]){int mid=height[st.top()];st.pop();if(!st.empty()){int h=min(height[i],height[st.top()])-mid;int w=i-st.top()-1;sum+=h*w;}}st.push(i);}}return sum;}
};

LeetCode:84.柱状图中最大的矩形

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int result=0;stack<int> st;heights.insert(heights.begin(), 0); // 数组头部加入元素0heights.push_back(0); // 数组尾部加入元素0st.push(0);for(int i=1;i<heights.size();i++){//循环//条件1 大于等于的情况if(heights[i]>=heights[st.top()]){st.push(i);}//条件2 小于的情况else{while(!st.empty()&&heights[i]<heights[st.top()]){int mid=st.top();st.pop();if(!st.empty()){int left=st.top();int right=i;int h=heights[mid];int w=right-left-1;result=max(result,w*h);}}st.push(i);}}return result;}
};

感觉是最难理解的一部分了&完结撒花

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75378.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字IC笔试题---千题解,量大管饱,图文并茂

前言出笔试题汇总&#xff0c;是为了总结秋招可能遇到的问题&#xff0c;做题不是目的&#xff0c;在做题的过程中发现自己的漏洞&#xff0c;巩固基础才是目的。所有题目结果和解释由笔者给出&#xff0c;答案主观性较强&#xff0c;若有错误欢迎评论区指出&#xff0c;资料整…

【MySQL之SQL语法篇】系统学习MySQL,从应用SQL语法到底层知识讲解,这将是你见过最完成的知识体系

文章目录一、数据管理技术的三个阶段二、SQL语句学习1. DCL数据控制语言1.1 创建用户1.2 修改用户名1.3 修改密码1.4 删除用户1.5 授权1.6 查看权限1.7 回收权限2. DDL数据定义语言2.1 操作数据库2.2 操作数据表2.3 操作数据3. DQL数据查询语言基本语法3.1 单表查询3.1.1选择表…

Qt::QOpenGLWidget 渲染天空壳

在qt窗口中嵌入opengl渲染天空壳和各种立方体一 学前知识天空壳的渲染学前小知识1 立方体贴图 天空壳的渲染就是利用立方体贴图来实现渲染流程2 基础光照 光照模型3 opengl帧缓冲 如何自定义帧缓冲实现后期特效4 glsl常见的shader内置函数 glsl编程常用的内置函数二 shader代码…

某建筑设计研究院“综合布线管理软件”应用实践

某建筑设计研究院有限公司&#xff08;简称“某院”&#xff09;隶属于国务院国资委直属的大型骨干科技型中央企业。“某院”前身为中央直属设计公司&#xff0c;创建于1952年。成立近70年来&#xff0c;始终秉承优良传统&#xff0c;致力于推进国内勘察设计产业的创新发展&…

02-MyBatis查询-

文章目录Mybatis查询1&#xff0c;配置文件实现CRUD1.1 环境准备Debug01: 别名mybatisx报错1.2 查询所有数据1.2.1 编写接口方法1.2.2 编写SQL语句1.2.3 编写测试方法1.2.4 起别名解决上述问题1.2.5 使用resultMap解决上述问题1.2.6 小结1.3 查询详情1.3.1 编写接口方法1.3.2 编…

专题:一看就会的C++类模板讲解 (1)

目录 一.类模板的作用 二.类模板的定义&#xff1a; 三.类模板的声明格式&#xff1a; 四.类模板对象 五.再举一个例子 一.类模板的作用 面向对象的程序设计编程实践中&#xff0c;我们可能会面临这样的问题&#xff1a;要实现比较两个数的大小。明明比较两个数的方法都一样…

JS - js中常用的深拷贝和浅拷贝理解

文章目录1&#xff0c;JS数据类型2&#xff0c;深浅拷贝概念3&#xff0c;浅拷贝实现4&#xff0c;深拷贝实现1&#xff0c;JS数据类型 基本数据类型&#xff1a; Number、Boolean、String、undefined、Null。变量是直接按值存放的&#xff0c;存放在栈内存中的简单数据段&am…

BAT测开8年工作总结,这些都看懂了,Linux就没问题了

一、文件目录操作 1. ls 命令 ls 命令不仅可以查看 linux 文件夹包含的文件而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。 命令格式 ls [选项][目录名] 常用参数 -l &#xff1a;列出长数据串&#xff0c;包含文件的属性与权限数据等-a &#xff…

实战|掌握Linux内存监视:free命令详解与使用技巧

文章目录前言一. free命令介绍二. 语法格式及常用选项三. 参考案例3.1 查看free相关的信息3.2 以MB的形式显示内存的使用情况3.3 以总和的形式显示内存的使用情况3.4 周期性的查询内存的使用情况3.5 以更人性化的形式来查看内存的结果输出四. free在脚本中的应用总结前言 大家…

Dataway 让 Spring Boot 不再需要 Controller、Service、DAO、Mapper 简单接口直接开发。

新的sql语法可以先看一下官网&#xff0c;部署起来之后会用到Dataql&#xff1a; DataQL - 数据查询语言https://www.dataql.net/先看一下效果 接下来来实现一下。 1 创建spring boot项目 导入依赖 <!--begin dataWay--><!--hasor-spring 负责 Spring 和 Hasor 框架之…

Confluence 安装

Confluence 安装 一、购买一台服务器 推荐使用 Ubuntu 版本服务器。 二、安装宝塔面板 官方安装地址 安装地址 Centos 安装脚本 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec…

车机系统开发——Android Automotive

Android Automotive介绍 Android Automotive是⼀个基本的Android平台&#xff0c;它运⾏预安装的&#xff08;车载信息娱乐&#xff09;IVI系统&#xff0c;Android应⽤程序以及可选的第⼆⽅和第三⽅Android应⽤程序。 Android Automotive的硬件抽象层(HAL)为Android框架提供…

系统升级丨分享返佣,助力商企实现低成本高转化营销

秉承助力传统经济数字化转型的长远理念 酷雷曼VR再次在VR全景营销中发力 创新研发“分享返佣”功能 进一步拓宽商企VR全景营销渠道 助力商企搭建低成本、高传播、高转化 的VR营销体系 01、什么是“分享返佣”&#xff1f; ●“分享返佣”即“推广”返佣&#xff0c;是酷…

Softing OPC Tunnel——绕过DCOM配置实现OPC Classic广域网通信

一 摘要 Softing OPC Tunnel是dataFEED OPC Suite的一个组件&#xff0c;可避免跨设备OPC Classic通信中出现的DCOM配置问题&#xff0c;同时可保证跨网络数据交换的高性能和可靠性。OPC Tunnel内部集成的存储转发功能&#xff0c;可在连接中断时缓存数据&#xff0c;并在重新…

【数据结构与算法】图 ( 图的存储形式 | 图的基本概念 | 图的表示方式 | 邻接矩阵 | 邻接表 | 图的创建 | 代码示例 )

文章目录一、图的存储形式二、图的基本概念三、图的表示方式1、邻接矩阵2、邻接表四、图的创建 ( 代码示例 )一、图的存储形式 线性表 中的元素 , 有 一个 直接前驱 和 一个 直接后继 ; 树 中的元素 , 有 一个 直接前驱 和 多个 直接后继 ; 图 中的元素 , 有 多个 直接前驱 和…

华为OD机试题,用 Java 解【入栈出栈】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

软件分析笔记02---Intermediate Representation

整体contents compiler &#xff08;source code ——> machine code&#xff09; non-trivial非平凡的 经过 语义分析->语法分析->类型检查等各种trivial的分析&#xff08;前端&#xff09;&#xff0c;生成中间代码IR->进行non-trivial的分析&#xff08;及静…

47个SQL性能优化技巧,看到就是赚到

1、先了解MySQL的执行过程 了解了MySQL的执行过程&#xff0c;我们才知道如何进行sql优化。 &#xff08;1&#xff09;客户端发送一条查询语句到服务器&#xff1b; &#xff08;2&#xff09;服务器先查询缓存&#xff0c;如果命中缓存&#xff0c;则立即返回存储在缓存中的…

Python大数据培训班特色优势及工作方向

Python大数据培训班有多个大数据培训班类型&#xff0c;同时也包括训练营、学徒班、就业班等。 具体班型&#xff1a; 大数据挖掘与人工智能&#xff08;大数据分析&#xff09;学徒班、大数据应用开发学徒班 大数据挖掘与人工智能&#xff08;大数据分析&…

解决MySQL的 Row size too large (> 8126).

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;无尽的折腾后&#xff0c;终于又回到…