class Solution {
public:
    vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
        vector<int> res;
        int n = num.size();
        if(size == 0 || size > n)
            return res;
        deque<int > dq; // 存储元素的下标
        for(int i = 0; i < n; i++) {
            while(!dq.empty() && num[dq.back()] < num[i]) { // 使dq按照滑动窗口内从大到小排列
                dq.pop_back();
            }
            dq.push_back(i);
            if(i >= dq.front() + size) { // 当最大元素不在滑动窗口内
                dq.pop_front();
            }
            if(i >= size - 1) // 从第一个滑动窗口最右开始压入当前滑动窗口最大值
                res.push_back(num[dq.front()]);
        }
        return res;
    }
};