AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

滑动窗口模板

作者: 作者的头像   炼心 ,  2019-11-03 17:11:11 ,  所有人可见 ,  阅读 1692


1


1
  • 滑动窗口求最大值版本STL
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]]);
  }

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息