刷题关键点总结-单调栈、单调队列

单调栈,单调队列顾名思义,栈内或者队列内元素具有一致下降或者一致上升的特点。

选用单调栈或者队列的出发点:

使用单调栈或者单调队列一般具有三个出发点: 1.求栈或队列内某个元素左侧或者右侧第一个比它大或者小的元素。 单调递减栈或者队列可以求得第一个比它大的数字。单调递增栈或者队列可以求第一个比它小的数字。2.需要保持一种递增或者递减的序。3.求一个区间的最大最小值,顶或者尾。

单调栈VS单调队列:

单调栈只用处理尾部数据,单调队列用于头部数据也需要处理的情况。

单调队列在一些情况下可以被用来当作two pointer的延伸版使用。

复杂度:

O(n)复杂度,每个元素只入一次栈,只出一次栈或者队列。所以当题目数字特别大,采用其他方法复杂度很高时,单调栈的可能性更大。

相关题目:

Shortest Subarray with Sum at Least K 待复习,略抽象

Sliding Window Maximum

Trapping Rain Water

Largest Rectangle in Histogram

Maximal Rectangle

Max Tree lintcode

 

posted on 2018-09-08 00:17  Sheryl Wang  阅读(206)  评论(0编辑  收藏  举报

导航