单调栈+单调队列知识点

单调栈:

用于求解一个数组上所有数左边/右边第一个比它小/大的数

实现思路(求这个数右边的第一个比它大/小的数为例):
求比它大的:

维护栈从底至顶单调递增
当遍历到一个元素时,当栈非空且栈顶元素小于该遍历元素时,不断出栈(并记录出栈元素答案)

求比它小的:

维护栈从底至顶单调递减

当遍历到一个元素时,当栈非空且栈顶元素大于该遍历元素时,不断出栈(并记录出栈元素答案)

对两个都成立:如果结束遍历后栈非空,则剩余元素答案为数组长度+1

对于求解左边的,只需要将遍历顺序颠倒

单调队列:

用于求解一个滑动窗口的最大/最小值

维护一个双端队列deque

以求最大值为例:
维护单调队列单调递增

如果队尾元素小于遍历元素,则不断出队尾。

当遍历的位置大于窗口大小并且的确到了队头元素出队的时候,将队头出队

每次滑动最值都是队头元素

posted @ 2025-04-24 19:06  Marinaco  阅读(13)  评论(0)    收藏  举报
//雪花飘落效果