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;
}
};