(数据结构)单调栈的介绍

什么是单调栈

单调栈,就是栈内元素从栈底到栈顶具有单调性的栈,可以分为单调递增栈和单调递减栈。

特点

  1. 具有栈的相关性质。
  2. 在维护栈的时候,如果要入单调递减(增)栈的元素比栈顶元素大,那就将栈顶元素出栈,直到栈顶元素大于(小于)当前要入栈的元素,这时再将元素入栈。

因为构建栈需要将这一串元素遍历一遍,所以时间复杂度为O(n)

作用

可以根据单调栈,判断出在一串元素中某个元素的左边或者右边第一个比其大或者小的元素。

现在让我们来具体实现和分析一下:

单调递增栈(a为要入栈元素,b为栈顶元素):

  1. 当a >= b时,将a入栈成为栈顶。
  2. 当a < b时,将b移出,再比较a和新栈顶的大小,直到新栈顶<=a,将a入栈。

单调递减栈(a为要入栈元素,b为栈顶元素):

  1. 当a <= b时,将a入栈成为栈顶。
  2. 当a > b时,将b移出,再比较a和新栈顶的大小,直到新栈顶>=a,将a入栈。

如果我们需要找到的是比该元素值大或者小的元素,那我们就可以直接将元素入栈。
如果我们需要找到的是比该元素值大或者小的元素的位置,那么我们就可以将元素的位置下标入栈。

以上就是我个人在做题过程中对单调栈的一些见解,如果各位发现有瑕疵的地方,请指正,谢谢。

你可能感兴趣的:(数据结构与算法,#,栈)