class Solution {
public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
vector<int> res;
if(size > num.size()) return res;
deque<pair<int, int> > dq; //严格递减队列
for(int cur = 0; cur < num.size(); cur++) {
while(!dq.empty() && num[cur] >= dq.back().first) //当前元素比队尾元素大时
dq.pop_back(); //将队尾元素弹出
dq.push_back({num[cur], cur}); //在队尾插入当前元素
if(cur >= size - 1) { //开始计算
while(dq.front().second < cur - size + 1) //当队头下标在当前窗口左边时
dq.pop_front(); //弹出队头元素
res.push_back(dq.front().first); //队头为当前窗口最大值
}
}
return res;
}
};