单调栈+单调队列知识点
单调栈:
用于求解一个数组上所有数左边/右边第一个比它小/大的数
实现思路(求这个数右边的第一个比它大/小的数为例):
求比它大的:
维护栈从底至顶单调递增
当遍历到一个元素时,当栈非空且栈顶元素小于该遍历元素时,不断出栈(并记录出栈元素答案)
求比它小的:
维护栈从底至顶单调递减
当遍历到一个元素时,当栈非空且栈顶元素大于该遍历元素时,不断出栈(并记录出栈元素答案)
对两个都成立:如果结束遍历后栈非空,则剩余元素答案为数组长度+1
对于求解左边的,只需要将遍历顺序颠倒
单调队列:
用于求解一个滑动窗口的最大/最小值
维护一个双端队列deque
以求最大值为例:
维护单调队列单调递增
如果队尾元素小于遍历元素,则不断出队尾。
当遍历的位置大于窗口大小并且的确到了队头元素出队的时候,将队头出队
每次滑动最值都是队头元素

浙公网安备 33010602011771号