码迷,mamicode.com
首页 > 其他好文 > 详细

单调栈总结

时间:2018-12-24 02:31:43      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:histogram   今天   rect   就是   破坏   入栈   ppi   递增   rectangle   

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

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

单调栈总结

标签:histogram   今天   rect   就是   破坏   入栈   ppi   递增   rectangle   

原文地址:https://www.cnblogs.com/shawshawwan/p/10166459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!