单调栈

刷到好多道单调栈的题了,但是不会,难,不知道怎么用,什么时候用

1啥是单调栈

栈知道吧,一头进出
单调知道吧,有序
单调栈知道了吧,存储的元素有序的栈,
但是单调增栈呢,弹出来的元素是递增的

2啥时候用

为任意一个元素找左边和右边第一个比自己大/小的位置用单调栈
一般化:“在一维数组中找第一个满足某种条件的数”的场景就是典型的单调栈应用场景。

3怎么用

注意!
这个单调栈不是改变了入栈时元素存储位置的规则
而是按照元素单调的原则入栈,就是入栈时就保证了这个元素进去就是单调的
或者:
栈记录的是索引,而索引对应的元素是单调的

3.1 注意

入栈的元素如果不满足条件怎么办,
划重点!!!
先出栈,直到能保证单调特征为止,
这也是为啥可以用于“在一维数组中找第一个满足某种条件的数”的场景就是典型的单调栈”应用场景

例如:元素按规则入栈,6入栈了,该入栈2了,这时候发现进不去,所以2是6右边第一个xiaoyu
image

例子来源:
https://leetcode-cn.com/problems/largest-rectangle-in-histogram/solution/84-by-ikaruga/

3为啥这么用

接雨水的题
image
对每一列,他能接到的雨水的量,等于他的高度和他两侧比他高的里面的矮的那个的高度差

posted @ 2022-03-31 20:06  荧惑微光  阅读(38)  评论(0编辑  收藏  举报