3 Monotonous Stack

单调栈分的细有四种(递增或者递减),主要在于是不是严格单调,看情况和使用场景选用,比如栈里是否存在相等的元素

栈里通常存放下标或者元素,可以正向遍历或者反向遍历

想找 "从当前元素向某一方向的第一个 (大于 / 小于) 自己的元素",就要靠单调栈来维护单调性,对应的是 (递减 / 递增)。

不用刻意去记(peek大就是递增,小就是递减,有等于时是严格单调),主要想一下什么大小关系会导致栈进行pop,比如

  • What? 栈中只保存升序序列

  • How? 新元素插入前 pop 掉所有比它大的

  • stack([1,2,8,10]).push(5) => stack([1,2,5])

顺便提一下Longest Increasing Subsequence (LIS) 问题,其实和但单调栈思路类似

Last updated