题目链接:https://www.acwing.com/problem/content/description/75/
题目如下:
class Solution {
public:
vector maxInWindows(vector& nums, int k) {
vector res;
deque que;//双端队列由vector实现,滑动窗口队列中存放的是数组下标,因为维护窗口大小需要通过下标来实现
for(int i=0;i
//将队列里过时的元素删除,即当前位置为i时,则当前窗口的位置为[i-k+1,i]
while(que.size() && que.front()<=i-k) que.pop_front();
//把当前队列中所有比自己小的元素全部删除
while(que.size()&&nums[que.back()]<=nums[i]) que.pop_back();
//将元素放入队列
que.push_back(i);
//把队头的元素输出来,这里做判断主要是用于得出第一个窗口中最大值的时机
if(i>=k-1) res.push_back(nums[que.front()]);
}
return res;
}
};



