algorithm-monotonic-stack
单调栈
单调栈(Monotonic Stack)是一种特殊的栈,它首先是一个栈,从栈顶添加和删除元素,其次栈中的所有元素单调递增或者单调递减
在一个队列Deque中,我们offer右边,poll左边,这样左边就是队首,右边是队尾
如果这个Deque作为栈,我们push和pop左边,并且把左边作为栈顶
单调性的判断是从栈顶到栈底(Deque中从左往右看)
单增栈:栈顶到栈底的元素是单调递增的,即栈顶的元素最小
单减栈:栈顶到栈底的元素是单调递减的,即栈顶的元素最大
后上界:对于数组中的某个元素 a[i],它的后上界是指在它之后的第一个比它大的元素
后下界:对于数组中的某个元素 a[i],它的后下界是指在它之后的第一个比它小的元素
单调栈在算法中的应用在于它能够在一次扫描(从左到右)即O(n)的复杂度之内找到数组中每一个元素的后上界(单增栈)或者后下界(单减栈)
496. 下一个更大元素 II: 递增栈获得每个元素的后上界
2866. 美丽塔 II(2072)
1944. 队列中可以看到的人数(2105)
2454. 下一个更大元素 IV(2175):双单调栈
...