day21--滑动窗口的最大值

day21--滑动窗口的最大值_第1张图片

思路:

我们都知道,若是一个数字A进入窗口后,若是比窗口内其他数字都大,那么这个数字之前的数字都没用了。因为它们必定会比A早离开窗口,在A离开之前都争不过A,所以A在进入时依次从尾部排除掉之前的小值再进入,而每次窗口移动要弹出窗口最前面值,因此队首也需要弹出,所以我们选择双向队列。

双向队列

#include 
class Solution {
public:
    vector maxInWindows(const vector& num, unsigned int size) {
        int len=num.size();
        vector res;
        if(size>len || !size) return res;
        deque dq;//双向队列存储数组下标
        for (int i=0; i

复杂度分析:

  • 时间复杂度:O(n),数组长度为n,只遍历一遍数组
  • 空间复杂度:O(m),窗口长度m,双向队列最长时,将窗口填满

你可能感兴趣的:(数据结构机试复习打卡,数据结构)