单调栈是说栈里面的元素从栈底到栈顶是单调递增或者单调递减的(类似于汉诺塔)对栈进行了约束,单调递增或单调减的栈,跟单调队列差不多,但是只用到它的一端,利用它可以用来解决一些ACM/ICPC和OI的题目,如RQNOJ 的诺诺的队列等。
-
建立「单调递减栈」,并对原数组遍历一次:
-
如果栈为空,则把当前元素放入栈内
-
如果栈不为空,则需要判断当前元素和栈顶元素的大小:
-
如果当前元素比栈顶元素大:则逐个弹出栈顶元素,直到当前元素比栈顶元素小为止
-
如果当前元素比栈顶元素小:则把当前元素入栈
-
-
- 建立「单调递增栈」,并对原数组遍历一次:
-
如果栈为空,则把当前元素放入栈内
-
如果栈不为空,则需要判断当前元素和栈顶元素的大小:
-
如果当前元素比栈顶元素小:则逐个弹出栈顶元素,直到当前元素比栈顶元素大为止
-
如果当前元素比栈顶元素大:则把当前元素入栈
-
-
注意: 在使用单调栈的场景下,都能用暴力法解决。暴力解法具有较高的时间复杂度,而利用单调栈能减低时间复杂度