单调栈总结
Posted shawshawwan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单调栈总结相关的知识,希望对你有一定的参考价值。
今天做周赛又碰到了单调栈的题目,之前没有做好总结,这次好好总结下
1.基本思想
单调栈求解的基本问题
在一个线性数据结构中,为任意一个元素找左边和右边第一个比自己大/小的位置,要求O(n)的复杂度
基本解法很容易想到O(n^2)的解法,关键是O(n)的解法,就需要借助单调栈了。单调栈的一大优势就是线性的时间复杂度,所有的元素只会进栈一次,而且一旦出栈后就不会再进来了。
单调栈的性质
单调栈里的元素具有单调性:单调递减栈=>向栈生长的地方单调递减;单调递增栈=>向栈生长的地方单调递增
元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除
使用单调栈可以找到元素向左遍历第一个比他小的元素,也可以找到元素向左遍历第一个比他大的元素。
一般解题思路
总结
递减栈会剔除波谷,留下波峰;递增栈剔除波峰,留下波谷
2.例题
lc 42. Trapping Rain Water
题意:
思路:
代码:
lc 84. Largest Rectangle in Histogram
lc 962. Maximum Width Ramp
以上是关于单调栈总结的主要内容,如果未能解决你的问题,请参考以下文章