题目来自leetcode
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int>res;
if(nums.size()==0||k==0){
return res;
}
deque<int>dq;
for(int j=0,i=1-k;j<nums.size();j++,i++){
if(i>0&&nums[i-1]==dq.front()){dq.pop_front();}//删除不在框内的元素
while(!dq.empty()&&dq.back()<nums[j]){
dq.pop_back();
}
dq.push_back(nums[j]);
if(i>=0){res.push_back(dq.front());}
}
return res;
}
};
用双队列按非递增记录数组的窗口
往右移动时,将队列左边值移除,右边加入队列中并比较大小,队列中比该元素小的,出队列,保持队列非递增形式
用变量i来记录第一次窗口的形成