【刷题总结】单调栈系列问题

单调栈问题特征

LeetCode官方讲解

单调栈,就是栈的应用,里面的元素的大小按照他们所在栈内的位置,满足一定的单调性。

  • 单调栈里的元素具有单调性
  • 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除
  • 单调递增:栈可以找到元素向左向右遍历第一个比他小的元素,当元素出栈时,说明这个新元素是出栈元素向后找第一个比其小的元素,新栈顶元素是出栈元素向前找第一个比其小的元素
  • 单调递减:栈可以找到元素向左享有遍历第一个比他大的元素

单调栈问题思路

  • 常用于一组数组,结果与数组中元素位置及元素大小都有关系,遇到的问题和前后元素之间的大小关系有关系
  • 思考思路为:固定数组中的一个元素去想该点所需信息,观察数组中每一个元素的结果与其左右的第一个比它大或小的元素是否有关系,要取左右更大的数则用递减栈,取左右更小的数则用递增栈。
  • 另外,关注出栈时的意义,出栈时往往可以计算出该点元素的结果,结合业务去计算目的结果
  • 需要单独思考栈空,元素相等,元素处理完后栈内剩余元素的处理,可使用哨兵优化
  • 栈内结果常常储存为元素的下标,因为这类问题往往与下标关联,存储下标便于转换为其结果

单调栈问题解法

维护一个栈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值