单调栈总结

Posted shawshawwan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单调栈总结相关的知识,希望对你有一定的参考价值。

今天做周赛又碰到了单调栈的题目,之前没有做好总结,这次好好总结下

1.基本思想

单调栈求解的基本问题

在一个线性数据结构中,为任意一个元素找左边和右边第一个比自己大/小的位置,要求O(n)的复杂度

基本解法很容易想到O(n^2)的解法,关键是O(n)的解法,就需要借助单调栈了。单调栈的一大优势就是线性的时间复杂度,所有的元素只会进栈一次,而且一旦出栈后就不会再进来了。

单调栈的性质

  1. 单调栈里的元素具有单调性:单调递减栈=>向栈生长的地方单调递减;单调递增栈=>向栈生长的地方单调递增

  2. 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除

  3. 使用单调栈可以找到元素向左遍历第一个比他小的元素,也可以找到元素向左遍历第一个比他大的元素。

一般解题思路

总结

递减栈会剔除波谷,留下波峰;递增栈剔除波峰,留下波谷

2.例题

lc 42. Trapping Rain Water

题意:
思路:
代码:

lc 84. Largest Rectangle in Histogram

lc 962. Maximum Width Ramp



以上是关于单调栈总结的主要内容,如果未能解决你的问题,请参考以下文章

线性表--单调栈

线性表--单调栈

刷题总结——玉蟾宫(bzoj3039单调栈)

LeetCode- 柱状图中最大的矩形(单调栈)

单调队列与单调栈用法详解

单调栈以及单调队列