[数据结构] 单调栈

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构] 单调栈相关的知识,希望对你有一定的参考价值。

[数据结构] 单调栈

单调栈为栈中元素按照升序排列(递增栈)或降序排列(递减栈)的栈,通常可以用来寻找下一个最大/最小的题。

[1,3,4,2] 数组实现一个递增栈:

  1. [1, 3, 4] 这里其实都没有什么问题,一直是处在递增的状态

  2. 遇到 2 时开始弹栈,遇到 1 时完成进栈操作

496. Next Greater Element I 这一题就可以用递减栈来实现。

题目中需要找到的是下一个最大数字,数组依旧时 [1,3,4,2]

  1. 第二个数字为 3,$ 3 > 1 $,因此 31 的下一个最大数字,在这里进行将 1 弹出,并将 3 压入栈中

  2. 下一个数字为 4,同样也满足下一个最大数字的需求,因此实现同样的弹栈、入栈操作

  3. 最后一个数字是 2,这之后没有更大的数字了,因此将其直接压入栈中

    递减栈中弹出的值,是碰到了 比它本身更大的值,因此可以利用这一特性寻找下一个更大数。

同样的思想可以应用到 739. Daily Temperatures84. Largest Rectangle in Histogram 等题上。

以上是关于[数据结构] 单调栈的主要内容,如果未能解决你的问题,请参考以下文章

[数据结构] 单调栈

[数据结构] 单调栈

golang 代码实现单调栈

数据结构-优先队列与栈

sql 升序降序排列

如何实现JSP列表升序或者降序