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