LeetCode——单调栈题型分析

本文介绍了单调栈的概念,以及如何使用单调栈解决NextGreaterElement问题,包括给定数组找每个元素的下一个更大元素。通过示例详细解析了单调栈的处理过程,并展示了LeetCode相关题目如496.下个更大元素I和503.下个更大元素II的解题思路。此外,还展示了如何运用单调栈解决困难级别题目41.接雨水,计算接雨水的总量。
摘要由CSDN通过智能技术生成

〇、引入

什么是单调栈:单调栈是栈结构,但使用了一定方法让栈内元素保持单调性(单调递增或递减)。

能解决的问题:专门解决 Next Greater Element 这类典型问题。即在数组中寻找每个元素的下个更大元素。

本篇主要描述了什么是 Next Greater Element问题、单调栈的解题模板,以及它能解决的哪些衍生问题。

一、Next Greater Element

描述:

给定一个数组,返回一个等长的数组,对应索引存储着下一个更大元素,如果没有更大的元素,就存 -1。

示例:

输入:[2,1,2,4,3] 输出:[4,2,4,-1,-1] 解释: 第一个 2 后面比 2 大的数是 4; 1 后面比 1 大的数是 2; 第二个 2 后面比 2 大的数是 4; 4 后面没有比 4 大的数,存 -1; 3 后面没有比 3 大的数,存 -1。

题解:

对于上面这种类型的题最优的解决方式就是单调栈了,个人认为单调栈思想是:“暂时得不出结果的数据就入栈,等待时机到了,能得出结果时再取出来处理。”一般来说,每个元素都不可能在入栈时就能得出结果,所以每个元素都会有入栈操作,只是每个元素入栈前需要判断之前栈顶的元素是否等到了时机,只要时机到了就把之前存入栈顶的元素取出处理,而这个时机也控制着栈内元素的单调性。

比如循环示例中的数组,

遍历到下标为0的元素时,此时并不知道下个更大元素是谁,所以将当前下标入栈,栈内元素有[0],栈顶为0;

遍历到下标为1的元素时检查栈顶的元素是否等到了时机,一经比较1不大于arr[0]=2,说明栈顶元素时机并没有到,然后将当前下标入栈,栈内元素有[0,1],栈顶为1;

遍历到下标为2的元素时检查栈顶的元素是否等到了时机,一经比较2大于arr[1]=1,说明栈顶元素等到了时机,则弹出栈顶元素计算出对应的结果值 result[1]=2,之后栈内元素有[0],栈顶为0,再比较2不大于arr[0]=2,然后将当前下标入栈,栈内元素有[0,2],栈顶为2;

遍历到下标为3的元素时检查栈顶的元素是否等到了时机,一经比较4大于arr[2]=2,说明栈顶元素等到了时机,则弹出栈顶元素计算出对应的结果值 resul

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值