代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I
前言
折磨的死去活来的动态规划终于结束啦,今天秋秋给大家带来两题非常经典的单调栈问题,可能你不清楚单调栈是什么,可以用来解决什么问题,今天我们就来一步一步的逐渐了解单调栈,到能够灵活使用单调栈.注意以下讲解中,顺序的描述为 从栈头到栈底的顺序
什么时候用单调栈?
通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。这种情况我们使用暴力的两层for循环很明显是O(n^2)的时间复杂度.
那么单调栈的原理是什么呢?
原理就是用空间来换时间,用一个辅助栈来完成了一次循环做的事情,也就是记录下了前面已经遍历过的元素.更直白来说,就是用一个栈来记录我们遍历过的元素,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。
注意点
1.明确是单调递增栈还是单调递减栈
如果求一个元素右边第一个比他大的元素,就使用递增栈,如果是求比他小的元素就使用递减栈
当然左边也一样
2.明确单调栈里面放的是啥,表示什么意思
模拟
下面我们举个例子来直观感受一下单调栈的执行过程
首先这题肯定是一个单调增栈
接下来我们用temperatures = [73, 74, 75, 71, 71, 72, 76, 73]为例来逐步分析,输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
1.首先先将第一个遍历元素加入单调栈(放入的是下标,因为很多情况下需要使用下标更好操作一点)
2.判断目前遍历的元素和栈顶元素的大小进行比较,有三种情况,大于等于小于
此时小于和等于的情况是一样的,我们直接将其入栈即可,要是大于我们就让栈顶元素出栈,一直比较,让所有比我目前遍历的元素小的元素都出栈,此时出栈的时候就是收割结果的时候,直接让当前元素和栈顶元素作差存入结果数组即可,如此循环往复即可得到答案.
有人说栈里面最后还会存有元素怎么办??
无需处理
最后无需处理的原因是因为初始化的时候已经确定了这种没有结果的默认值
LeetCode T739 每日温度
题目链接:739. 每日温度 - 力扣(LeetCode)

题目思路:
利用上述单调栈的思路
我们在单调栈中存下标,进行比较的时候如果小于等于nums[栈顶元素]直接让其入栈,大于的话就将栈顶元素作为结果数组的下标,返回两者差值,切记:要将当前元素继续比较,直到不能比较为止,所以这里用的是while而不是if(也要记得不能比之后将目前元素入栈)
最后返回结果数组即可
题目代码:
class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] res = new int[temperatures.length];Stack<Integer> st = new Stack<>();st.push(0);for(int i = 1;i<temperatures.length;i++){if(!st.isEmpty()&&temperatures[i]<=temperatures[st.peek()]){st.push(i);}else{while(!st.isEmpty()&&temperatures[i]>temperatures[st.peek()]){res[st.peek()] = i - st.peek();st.pop();}st.push(i);}}return res;}
}
LeetCode T496 下一个最大元素I
题目链接:496. 下一个更大元素 I - 力扣(LeetCode)

题目思路:
相比于上面的题目,本题的意思是nums1对应在nums2中的相同数值的元素,求nums2中比此元素大的第一个元素的值,并返回长度和nums1相同,各个元素的求值结果.找不到返回-1
这里我们用示例2来理解一下题意,避免曲解题意
nums1 = [2,4]
nums2 = [1,2,3,4]
这里nums1的元素2对应在nums2中的2,其中第一个比他大的元素是3,所以res[0] = 3同理4在nums2中找不到比他还大的元素了,返回的就是res[1] = -1
这题的关键难点就是将这两个数组联系起来,我们可以使用map的方式将两个元素联系起来
这里由于元素都是唯一存在的,所以我们可以用map遍历第一个数组,key对应元素,value对应下标,这样我们在nums2中找到元素之后就可以利用这个map来得到其对应元素在nums1中的下标了,从而填入我们的结果数组中返回.
题目代码:
class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Stack<Integer> st = new Stack<>();Map<Integer,Integer> map = new HashMap<>();int[] res= new int[nums1.length];Arrays.fill(res,-1);for(int i = 0;i<nums1.length;i++){map.put(nums1[i],i);}st.push(0);for(int i = 1;i<nums2.length;i++){if(!st.isEmpty() && nums2[i]<=nums2[st.peek()]){st.push(i);}else{while(!st.isEmpty() && nums2[i]>nums2[st.peek()]){if(map.containsKey(nums2[st.peek()])){Integer index = map.get(nums2[st.peek()]);res[index] = nums2[i];}st.pop();}st.push(i);}}return res;}
}
相关文章:
代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I
前言 折磨的死去活来的动态规划终于结束啦,今天秋秋给大家带来两题非常经典的单调栈问题,可能你不清楚单调栈是什么,可以用来解决什么问题,今天我们就来一步一步的逐渐了解单调栈,到能够灵活使用单调栈.注意以下讲解中,顺序的描述为 从栈头到栈底的顺序 什么时候用单…...
高可用--限流熔断降级
熔断 熔断是应对微服务雪崩效应的一种链路保护机制。 场景 服务端出现问题 服务指标:响应时间、错误率、连续错误数等,超过阈值出发熔断。硬件指标:CPU、网络IO、内存 目的 服务端恢复需要时间、服务端需要休息避免全调用链路崩溃&…...
win10电脑无法联网,设置IPv4,点击属性无法打开,闪退
win10设置IPv4,点击属性无法打开,闪退 问题:win10设置IPv4,点击属性无法打开,闪退 问题:win10设置IPv4,点击属性无法打开,闪退 第1步:用管理员打开cmd命令窗口,然后输入下面的命令&…...
【数据结构】邻接表与邻接矩阵的转换
一.基本思想 1.邻接矩阵转换为邻接表: 先设置一个空的邻接表,然后查找邻接矩阵的值不为零元素,找到后在邻接表的单链表对应位置加入表边节点。 2.邻接表转换为邻接矩阵: 在邻接表上顺序取出每个表边结点,将邻接矩阵…...
VR智慧景区:VR赋能文旅产业,激活消费潜能
随着国家数字化战略的不断深入实施,文旅产业数字化转型的步伐也在逐渐加快,以VR技术赋能文旅产业,让文旅景区线上线下双渠道融合,进一步呈现文化底蕴、激活消费潜能。 VR智慧景区以沉浸式、互动式、科技感的方式,将景区…...
Spring Boot EasyPOI 使用指定模板导出Excel
相信大家都遇到过,用户提出要把界面上的数据导成一个Excel,还得是用户指定的Excel格式,用原生的POI,需要自己去实现,相信是比较麻烦的,所以我们可以使用开源的EasyPOI. 先上个图,看看是不是大家…...
postgresql:记录表膨胀引起的io问题的处理
文章目录 1. io异常2.查看profile报告2.1 生成事发时间段的pgprofile2.2 查看报告 3.检查table是否膨胀4.执行vacuum full5.总结 1. io异常 iostat -x 1 20 Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq…...
Windows下安装RabbitMQ
1.安装Erlang 因为RabbitMQ是用Erlang语言编写的,所以在安装RabbitMQ之前需要先安装Erlang。 如果还未安装Erlang,官方下载安装包,点击Download Windows installer下载Erlang Downloads - Erlang/OTP 下载Erlang/OTP后,双击otp的…...
广州华锐互动VRAR:利用VR开展刑事案件公安取证培训,沉浸式体验提升实战能力
随着科技的飞速发展,虚拟现实(VR)技术为我们的生活和工作带来了前所未有的便利。近年来,VR技术在刑事案件公安取证培训中的应用逐渐显现出其独特优势。通过模拟真实的犯罪现场,VR技术为学员提供了沉浸式的体验,使他们在安全的环境…...
消息消费过程
前言 本文介绍下Kafka消费过程, 内容涉及消费与消费组, 主题与分区, 位移提交,分区再平衡和消费者拦截器等内容。 消费者与消费组 Kafka将消费者组织为消费组, 消息只会被投递给消费组中的1个消费者。因此, 从不同消费组中的消费者来看, Kafka是多播(Pub/Sub)模式…...
使用Lychee搭建个人图片存储系统并进行远程访问设置实现公网访问本地私人图床
文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站,可以看做是云存储的一部分,既可…...
12-2- DCGAN -简单网络-卷积网络
功能 随机噪声→生成器→MINIST图像。 训练方法 0 损失函数:gan的优化目标是一个对抗损失,是二分类问题,用BCELoss 1 判别器的训练,首先固定生成器参数不变,其次判别器应当将真实图像判别为1,生成图像判别为0 loss=loss(real_out, 1)+loss(fake_out, 0) 2 生成器的…...
Redis持久化策略之RDB与AOF
文章目录 1.RDB1)基本介绍2)自动触发3)手动触发4)RDB文件5)优点缺点 2.AOF1)基本介绍2)使用方式3)工作流程4)重写机制5)AOF文件6)优点缺点 3.RDB AOF 我们都知道,redis 是一个基于内存的数据库。基于内存的好处是访问速度快,缺点是“不持久”——当数据…...
Python学习笔记--初识 Python 正则表达式
初识 Python 正则表达式 正则表达式是一个特殊的字符序列,用于判断一个字符串是否与我们所设定的字符序列是否匹配,也就是说检查一个字符串是否与某种模式匹配。 Python 自 1.5 版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正…...
webAPP基础学习
###视觉基础 part-I ####1.面试中常见的像素问题 >什么是像素? *1.什么是px? px-虚拟像素,css像素的单位 px是一个相对单位,相对于设备像素而言 >相对性 a.相对于同一个设备,css像素的可变的 css像素物理像素>会受到缩放的影响 css像素缩放倍数*单个物理像…...
RIP路由信息协议
RIP路由信息协议(Routing Information Protocol) 最先得到广泛应用的协议,最大优点是简单要求网络中的每个路由器都要维护一张表,表中记录了从它自己到其他每一个目的网络的距离RIP是应用层协议,它在传输层使用UDP,RIP报文作为UD…...
kubernetes 高可用集群
目录 一、haproxy负载均衡 二、pacemaker高可用 三、部署control-plane 四、部署worker node 实验环境 主机名 IP 角色 docker 192.168.67.10 harbor k8s1 192.168.67.11 control-plane k8s2 192.168.67.12 control-plane k8s3 192.168.67.13 control-plane k8s…...
java实现插入排序
图解 以下是Java实现插入排序的代码: public class InsertionSort {public static void main(String[] args) {int[] arr {5, 2, 4, 6, 1, 3};insertionSort(arr);System.out.println(Arrays.toString(arr)); // output: [1, 2, 3, 4, 5, 6]}public static void i…...
深度学习之基于YoloV5血红细胞检测识别系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习已经在许多领域中得到了广泛的应用,包括医疗健康领域。其中,YOLO(You O…...
8、可视化高斯滤波器并完成高斯滤波
本节一起绘制一个可视化的高斯滤波器,同时对一个彩色图像增加高斯噪声,最后通过一个高斯滤波器对图像进行降噪处理。 就像上节说的那样,滤波不是学习重点,下面通过实操了解下原理即可。 可视化高斯滤波器 高斯滤波器符合高斯分布,并且是二维高斯分布,这一点在上一节高斯…...
Qwen3字幕系统Linux部署指南:从安装到性能调优
Qwen3字幕系统Linux部署指南:从安装到性能调优 为视频内容自动生成精准字幕的时代已经到来 还记得手动为视频添加字幕的痛苦经历吗?一遍遍听写、校对、调整时间轴,几分钟的视频往往需要花费数小时。现在,基于Qwen3的智能字幕系统可…...
一篇搞定2026年律所管理系统选购,避坑技巧+优质品牌全解析
据智研咨询2026年发布的《中国律所管理软件行业发展报告》显示,国内律所对管理系统的需求年增长率达28%,但近70%的律所表示选型后存在功能冗余、操作复杂、适配性差等问题,不仅未能提升效率,反而增加了办公成本。作为深耕律所管理…...
Lingbot-Depth-Pretrain-VitL-14处理复杂光照与反射场景效果展示
Lingbot-Depth-Pretrain-VitL-14处理复杂光照与反射场景效果展示 深度估计技术,简单来说就是让计算机像人眼一样,判断出画面中每个物体离我们有多远。这项技术在自动驾驶、机器人导航、增强现实等领域都扮演着关键角色。然而,当场景中出现一…...
深入浅出:图解程序控制、中断和DMA的工作原理与性能差异
深入浅出:图解程序控制、中断和DMA的工作原理与性能差异 想象你在一家餐厅点餐:第一种方式是服务员每隔30秒就来问你"好了吗";第二种是你按服务铃,服务员立刻过来;第三种是厨房直接把菜送到你桌上——这正是…...
微信支付商家券:从创建到核销的全链路开发实战
1. 微信支付商家券的核心价值与应用场景 商家券是微信支付为商户提供的数字化营销工具,本质上是一种电子优惠凭证。与传统的纸质优惠券相比,商家券最大的优势在于能够实现全链路数字化管理。我在帮一家连锁咖啡品牌接入商家券时发现,他们的线…...
Science重磅指南:如何打造高影响力论文摘要?附Abstract写作黄金法则!
1. 科学论文摘要的黄金结构 写论文摘要就像给陌生人讲一个精彩的故事——要在短短200字内让人眼前一亮。我在Nature和Science上发过几篇论文,也审过上百篇投稿,发现顶级期刊的摘要其实有套"万能公式"。这个公式的核心是把摘要拆解成7个关键部分…...
Qwen3-0.6B-FP8快速上手:无需CUDA环境的CPU友好型大模型对话工具指南
Qwen3-0.6B-FP8快速上手:无需CUDA环境的CPU友好型大模型对话工具指南 想体验大模型对话,但被动辄几十GB的模型和昂贵的显卡劝退?今天给大家介绍一个“小钢炮”——Qwen3-0.6B-FP8对话工具。它只有6亿参数,经过FP8量化后体积小巧&…...
搭建专属汽车电子测试 AI 助手
专栏:《AI 汽车电子测试实战》第 15 篇 作者:一线汽车电子测试工程师 适合人群:想搭建私有 AI 助手的测试团队、关注数据安全的工程师开篇:为什么需要专属 AI 助手? 这是我上个月在某车企的 AI 部署项目中的真实经历。…...
Elasticsearch踩坑记录:scaled_float字段查询结果和你想的不一样?
Elasticsearch中的scaled_float:为什么你的查询结果总是不准确? 刚接触Elasticsearch的开发者经常会遇到一个令人困惑的现象:明明存储的是精确的浮点数,查询时却返回了意料之外的结果。这背后往往与scaled_float字段类型的特殊处理…...
深入解析PLL锁相环在FPGA时钟管理中的核心应用
1. 从闹钟到芯片:PLL如何成为FPGA的"时间管家" 想象一下你早上起床的场景:手机闹钟准时响起,咖啡机开始自动煮咖啡,窗帘缓缓拉开让阳光照进来。这些设备之所以能完美同步,全靠它们内部精确的时钟信号。而在…...













