如题
[6 4 2] 10 3 8 5 9 -> 6
6 [4 2 10] 3 8 5 9 -> 10
6 4 [2 10 3] 8 5 9 -> 10
6 4 2 [10 3 8] 5 9 -> 10
6 4 2 10 [3 8 5] 9 -> 8
6 4 2 10 3 [8 5 9] -> 9
窗口内的队列-不单调,那么求解的时间复杂度将会是O(nm),其中n为数组长度,m为窗口队列长度。
有没有一种方法,让求解的时间复杂度降为O(n) 有的!单调队列,维护在队列处理顺序中的区间最大值;
单调队列
既然是单调队列,那就让我们一起来维护这个数据结构性质,所以:
- step1:判断“红”同学入列是否影响队列的单调性,若“红”同学大于“蓝”同学,就需要先剔除“蓝”同学;
- step2:“红”同学入列;
- step3:判断队列是否满员,队尾有1人入列,队首就需要有1人出列;
- step4:判断是否满足滑动窗口提前所需元素,报告输出当前滑动窗口的最大值;
使用场景
“单调队列”强调一个队列处理顺序,如果你可以把一个问题转化为求解顺序,抽象成队列求解顺序, 并且在这个过程中,你还需要维护区间最大值,那么就翻出“单调队列”准能帮助你大幅度提升处理速度。
- 时间复杂度:O(n)
参考文献
- 此文章为2月Day1学习笔记,内容来源于极客时间《人人都能学会的编程入门课》
最后
文中若有我没说清楚或错误的地方
欢迎v我yxdiet,备注下是掘金的小伙伴!
反手赞一个叭!对我是莫大的鼓励 💗