Skip to content

单调栈

参考:

而所谓 单调栈 则是在栈的 先进后出 基础之上额外添加一个特性:从栈顶到栈底的元素是严格递增(or递减)。

具体进栈过程如下:

  • 对于单调递增栈,若当前进栈元素为 e,从栈顶开始遍历元素,把小于 e 或者等于 e 的元素弹出栈,直接遇到一个大于 e 的元素或者栈为空为止,然后再把 e 压入栈中。
  • 对于单调递减栈,则每次弹出的是大于 e 或者等于 e 的元素。

实现最小栈

使用两个栈,一个栈A保存原始数据,一个栈B在每次入栈时与B栈顶元素进行比较,如果比其小则入栈,如果比起大则将栈顶元素再次入栈,保证栈顶是最小元素。两个栈出栈时需要同时出栈。

给定栈的入栈顺序,判断给定列表是否满足其出栈顺序

参考

入栈顺序pushV[1,2,3,4,5],判断出栈顺序popV[4,5,3,2,1]是否合法

  • 首先找到popV顶部的元素4,然后将pushV中该idx对应索引值后面的元素[5]认为未入栈,则pushV为[1,2,3,4]
  • 将popV和pushV顶部元素4弹出,重复步骤1,popV[1,2,3,4]顶部元素为5,pushV中不包含5,则从未入栈元素中一次入栈,直至找到5为止,此时pushV为[1,2,3,5]
  • 当pushV为空时表示满足出栈顺序