滑动窗口模板
作者:
炼心
,
2019-11-03 17:11:11
,
所有人可见
,
阅读 1692
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> res;
deque<int> q;
for(int i=0;i<nums.size();i++){
while(q.size()&&q.front()<=i-k)q.pop_front();//当前节点小于窗口最小的边,弹出
while(q.size()&&nums[q.back()]<=nums[i])q.pop_back();//如果最后的值小于当前的值时,将最后的一个值弹出
q.push_back(i);//每次迭代更新值
if(i>=k-1)res.push_back(nums[q.front()]);
}
return res;
}
};
//@ a 为存放数据的数组
int hh=0,tt=-1;
for(int i=0;i<n;i++){
//判断队头是否已经滑出窗口
if(hh<=tt&&i-k+1>q[hh])hh++;
while(hh<=tt&&a[q[tt]]>=a[i])tt--;
q[++tt]=i;
if(i>=k-1)printf("%d ",a[q[hh]]);
}