单调栈详解-基于LeetCode的题目

42 篇文章 1 订阅

大家经常在评论区问我如果学习Python,如何锻炼 自己的Python编程能力,这里给大家推荐一个我经常练习Python的网站:牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网

 里面还包含很多大厂笔试的Python题目,大家可以跟我一起刷题,从本周起我会陆续在博客分享我的刷题心得,欢迎大家跟我一起学习,有问题可以在评论区指出来,大家一起讨论。

单调栈的意思可以看这个链接,这位大佬写的很详细https://blog.csdn.net/liujian20150808/article/details/50752861

或者也可以直接看我的讲解:
单调栈,可以理解为有单调性的一个数组,在这里我们可以理解成为栈数组,栈数组可以是单调增,也可以是单调减,在本题中我们使用的是单调增即栈数组从0到数组最后是单调递增的。单调栈的数组性质也是我们常用的性质,到这里为止,我们对单调栈有了基本印象,一个单调递的数组
从栈底到栈顶,单调递增,可以理解为从栈数组的0位置开始到栈数组的最后一位一直是单调递增。


**单调栈的性质:**接下来我们分析单调栈的性质,因为单调栈是即栈数组是单调递增的,因此他的单调性必须一直保持,因此在遇到下一个需要插入
栈数组的值的时候,我们首先判断该值与栈顶元素相比那个大?我们设栈顶元素为a,需要插入的值为b,当a<b的时候,我们可以直接将b插入栈数组
,我们可以设原来的栈数组为[0 , a],0到a单调递增,符合单调栈的要求
1:a<b的时候 b可以直接压入栈,栈数组变成[0 , a , b]
2:a>b的时候 b无法直接压入栈,因为那样会破坏栈的单调性我们需要将a弹出栈,然后再将b压入栈,栈数组就会变成[0 , b]


**扩展-举例:我们扩展来讲,如果原来的栈数组为[0 , 1 , 5 , 8] ,可以看出栈顶元素为8,我们需要将9压入栈的话,因为9>8,所以压入之后栈数组变成[0 , 1 , 5 , 8 , 9]不影响原来的单调性,依然是单调递增。但是如果我们需要将4压入栈的话,我们需要先将大于4的值弹出栈,整个过程是这样的,先将要压入栈的值与当前的栈顶元素比较,即4与8比较。因为4<8,所以4无法压入栈,因此我们要弹出8,弹出8之后栈数组变成[0 , 1 , 5],然后4继续与栈顶元素5比较,因为4<5,因此我们需要弹出5,弹出之后栈顶数组变成[0 , 1],然后4与栈顶元素1比较,因为4>1,因此4可以压入栈,压入之后栈数组变成[0 , 1 , 4]
这就是单调栈的思想,把他变成数组来讲就很好理解-单调减的栈反过来理解即可(我想我已经表达的很清楚,不懂的可以在评论里指出来,我看到会回复解答的)

举例用法的话可以看我上一条博客,对于LeetCode的困难题求最大矩形面积写的题解,很详细

或者看我LeetCode写的题解力扣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小馨馨的小翟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值