刷题关键点总结-单调栈、单调队列
单调栈,单调队列顾名思义,栈内或者队列内元素具有一致下降或者一致上升的特点。
选用单调栈或者队列的出发点:
使用单调栈或者单调队列一般具有三个出发点: 1.求栈或队列内某个元素左侧或者右侧第一个比它大或者小的元素。 单调递减栈或者队列可以求得第一个比它大的数字。单调递增栈或者队列可以求第一个比它小的数字。2.需要保持一种递增或者递减的序。3.求一个区间的最大最小值,顶或者尾。
单调栈VS单调队列:
单调栈只用处理尾部数据,单调队列用于头部数据也需要处理的情况。
单调队列在一些情况下可以被用来当作two pointer的延伸版使用。
复杂度:
O(n)复杂度,每个元素只入一次栈,只出一次栈或者队列。所以当题目数字特别大,采用其他方法复杂度很高时,单调栈的可能性更大。
相关题目:
Shortest Subarray with Sum at Least K 待复习,略抽象
Largest Rectangle in Histogram
Max Tree lintcode
posted on 2018-09-08 00:17 Sheryl Wang 阅读(206) 评论(0) 编辑 收藏 举报