单调栈

单调栈:顾名思义,单调栈指栈内元素满足单调性的栈结构。单调递增or单调递减。下面以单调递增栈为例进行阐述

单调递增栈:就是栈内元素满足单调递增,假设当前元素为\(x\), 若栈顶元素\(<=x\), 则将\(x\)入栈,否则不断弹出栈顶元素,直至栈顶元素\(<=x\)

以3,1,4,5,2,7为例,入栈结束后,栈中仅保留了1,2,7,其中3由于比1大被弹出,4,5由于比2大弹出。

对于单调递增栈,有以下结论:

  • 若栈顶元素被弹出,则当前元素为其(被弹出的栈顶元素) 右边第一个比它小的数
  • 当一个数字被放入单调递增栈,其栈内左边的数是它在原始序列中,左边第一个小于等于它的数

单调栈的根本作用,在于求得每一个数字在原始序列中左/右边第一个大于/小于它自身得数字,并且,对于每一个数字只会入栈一次且最多出栈一次,因此总时间复杂度为\(O(n)\)

另外需要注意,一次「单调递增栈」的过程,可以求得每个数字左边第一个小于等于它的数,以及右边第一个小于它的数,此处需注意「小于等于」和「小于」的区别。除此之外,「单调递减栈」将上述的「小于」改为「大于」即可成立。

例题1:每日温度

posted @ 2022-05-21 10:02  Arthurma  阅读(60)  评论(0编辑  收藏  举报