算法思路:
定义: 栈里元素维持由栈底到栈顶从大到小的顺序叫递减栈。跟最小堆一样,递减栈的栈首元素最小。
反之是递增栈,不过此法因为用递减栈比较多,所以统称递减栈。通常是将下标而不是值放入到栈中,这样还可以知道元素间的距离。
求较大值 -> 递减栈
求较小值 -> 递增栈
递减栈 vs heap
实现上几乎一样,详见算法知识点目录。区别在于元素间是否需要保持顺序或者是否是stream
应用:
- 数组不能打乱顺序且求极值
注意事项:
- 跟最小堆一样,当元素大于栈顶元素的时候才倒逼栈内元素出栈。
- 记得是stack[-1]看栈顶元素不是stack[0]
Python代码:
1 | stack = [] |
LeetCode 503 Next Greater Element II
核心思想: 原数组复制一遍,用新数组完全做一遍递减栈,最后才截取结果
例子:
1 | def nextGreaterElements(self, nums: List[int]) -> List[int]: |
算法分析:
时间复杂度为O(n),空间复杂度O(n)。


