这篇文章简略说明了下单调栈和单调双端队列的感性认知和经典应用。
TODO:本来想画画图啥的,但最近有点忙,以后有空再补上和详细说明吧
Monotonic stack
stack一般用法:遇到有多个level的,跳入下个level可用stack存当前level的状态,跳出时恢复
- 最显而易见的作用就是线性寻找数组某个元素x的上/下一个大于或小于x的元素
- prev smaller/next smaller:increasing stack
- prev bigger/next bigger: decreasing stack
- 样板题
- 应用题
- 直觉感受:寻找波峰波谷,递减栈会剔除波谷,留下波峰;递增栈剔除波峰,留下波谷
- 1130. Minimum Cost Tree From Leaf Values Hard 需变形+贪心
- 什么是 波谷, 比如在这个题目里面,我们要找到这么一种形式的三个数, a > b < c,然后在a和c里面选小的和b合并,那么就可以用递减栈来找,并剔除波谷
- 即,假设递减栈中有 […, a, b],遇到 c > b,形成波谷,此时 pop b(和a,c中任何一个合并,即剔除波谷),变成[…, a], c
- 什么是 波谷, 比如在这个题目里面,我们要找到这么一种形式的三个数, a > b < c,然后在a和c里面选小的和b合并,那么就可以用递减栈来找,并剔除波谷
- 856. Score of Parentheses 分层的概念,用stack可存每层的数据,类似于stack实现函数调用
Monotonic Deque
- 经典用法是维护滑动窗口的最大值和最小值
- TODO: 补充其它例题