[数据结构] 单调栈
Posted GoldenaArcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构] 单调栈相关的知识,希望对你有一定的参考价值。
[数据结构] 单调栈
单调栈为栈中元素按照升序排列(递增栈)或降序排列(递减栈)的栈,通常可以用来寻找下一个最大/最小的题。
以 [1,3,4,2]
数组实现一个递增栈:
-
到
[1, 3, 4]
这里其实都没有什么问题,一直是处在递增的状态 -
遇到
2
时开始弹栈,遇到1
时完成进栈操作
496. Next Greater Element I 这一题就可以用递减栈来实现。
题目中需要找到的是下一个最大数字,数组依旧时 [1,3,4,2]
。
-
第二个数字为
3
,$ 3 > 1 $,因此3
是1
的下一个最大数字,在这里进行将 1 弹出,并将3
压入栈中 -
下一个数字为
4
,同样也满足下一个最大数字的需求,因此实现同样的弹栈、入栈操作 -
最后一个数字是
2
,这之后没有更大的数字了,因此将其直接压入栈中递减栈中弹出的值,是碰到了 比它本身更大的值,因此可以利用这一特性寻找下一个更大数。
同样的思想可以应用到 739. Daily Temperatures,84. Largest Rectangle in Histogram 等题上。
以上是关于[数据结构] 单调栈的主要内容,如果未能解决你的问题,请参考以下文章