栈进阶数据结构
一、栈维护最值
时间复杂度 O(1)
;设置三个栈 A、B、C
,其中 A
栈存储原始数据,B、C
栈分别维护栈中最小值和最大值:
1 | // 进栈操作 |
二、对顶栈
应用思想:始终在序列中间某个指定位置进行修改;
建立两个栈,A
栈存储从序列开头到当前位置的这一段子序列,栈 B
存储当前位置到序列结尾处的这一段子序列,二者都以当前位置那一端作为栈顶。
栈求 最大前缀和 时,用一个数组 f
维护栈 A
的最大前缀和;
1 | // A的栈顶位置下标pA,使用数组模拟栈 |
三、单调栈
单调栈算法:时间复杂度 O(N)
,处理问题思想在于 及时排除不可能的选项,保持策略集合的高度有效性和秩序性
应用:需要维护一个单调的序列并且可以不断从一端插入或删除
典例:
思路分析:
1 | // 数组模拟栈:往往更快一些 |