引入
何为单调栈?顾名思义,单调栈即满足单调性的栈结构。与单调队列相比,其只在一端进行进出。
为了描述方便,以下举例及伪代码以维护一个整数的单调递增栈为例。
过程
插入
将一个元素插入单调栈时,为了维护栈的单调性,需要在保证将该元素插入到栈顶后整个栈满足单调性的前提下弹出最少的元素。
例如,栈中自顶向下的元素为{0,11,45,81} 。
插入元素 时为了保证单调性需要依次弹出元素 0,11,操作后栈变为 {14,45,81}。
用伪代码描述如下:
实现
1
2
3
4
insert x
while !sta.empty() && sta.top()<x
sta.pop()
sta.push(x)
使用
自然就是从栈顶读出来一个元素,该元素满足单调性的某一端。
例如举例中取出的即栈中的最小值。