《较难》就这啊😅我以为多难呢

思路:拿一个队列装每一轮窗口的值,并且考虑上一个窗口的最大值是否被排出去,如果是,则重新比较队列里的值,如果不是,则只需比较新进来的值和上一个窗口的最大值,并更新最大值。

class Solution {
  public:
    int q_max(vector<int> arr) {
        int max = arr[0];
        for (int i = 0; i < arr.size(); i++)max = (arr[i] > max) ? arr[i] : max;
        return max;
    }
    vector<int> maxInWindows(vector<int>& num, int size) {
        vector<int> res;
        if (!size || size > num.size()) return res;
        vector<int> query;
        for (int i = 0; i < size; i++) query.push_back(num[i]);

        int pre;
        for (int i = size - 1; i < num.size(); i++) {
            if (i == size - 1) {
                res.push_back(q_max(query));
            } else {
                pre = query.front();
                query.erase(query.begin());
                query.push_back(num[i]);
                if (pre != res.back()) res.push_back((res.back() > query.back()) ? res.back() :
                                                         query.back());
                else res.push_back(q_max(query));
            }
        }
        return res;
    }
};