当前位置: 首页 > news >正文

滑动窗口(单调队列维护窗口)-acwing

题目:

154. 滑动窗口 - AcWing题库

代码(删除队列窗口多余的=>单调队列)

判断最值是否滑出窗口可以放在 入队的后面。

但是,判断,准备入队元素比前面小,要从队尾出队,放在入队前。

总之,是否滑出窗口在最值输出前操作完就行。

单调队列是用来维护当前窗口的(主要是多余的删去了)

  1. 多余值队尾出队(因为要将当前最小的输出出去,前面更大的都要队尾出去)
  2. 入队
  3. 将滑出窗口的索引队头出队
  4. 输出队头索引的值

从最小值输出开始做:

队列维护窗口的最小值的索引。每次滑动窗口,输出队头索引的数组a值。

#include<bits/stdc++.h>
using namespace std;const int N = 1e6+10;
int n, k;
int q[N], a[N];int main() {cin >> n >> k;for(int i = 0; i < n; i ++) cin >> a[i];int hh = 0, tt = -1;for(int i = 0; i < n; i ++) {if(hh<=tt && q[hh]<i-k+1) hh ++; // 滑出去了while(hh<=tt && a[q[tt]]>=a[i]) tt--; //前面的大于后面的,去掉前面的q[++tt] = i; //索引入队if(i>=k-1) cout << a[q[hh]] << " "; // 从遍历完第一个窗口开始输出栈顶}puts("");hh = 0, tt = -1;for(int i = 0; i < n; i ++) {if(hh<=tt && q[hh]<i-k+1) hh ++;while(hh<=tt && a[q[tt]]<=a[i]) tt --;q[++tt] = i;if(i>=k-1) cout << a[q[hh]] << " ";}puts("");return 0;
}

 代码(使用deque双端队列存窗口最值)

#include<bits/stdc++.h>
using namespace std;const int N = 1e6+10;
int a[N];
int main() {int n, k;cin >> n >> k;for(int i = 0; i < n; i ++) cin >> a[i];deque<int> q;for(int i = 0; i < n; i ++) {while(q.size() && q.back() > a[i]) q.pop_back();q.push_back(a[i]);//窗口滑动最小值出去了if(i>=k && q.front() == a[i-k]) q.pop_front();if(i>=k-1) cout << q.front() << " ";}puts("");q.clear();for(int i = 0; i < n; i ++) {while(q.size() && q.back() < a[i]) q.pop_back();q.push_back(a[i]);if(i>=k-1 && q.front() == a[i-k]) q.pop_front();if(i>=k-1) cout << q.front() << " ";}puts("");return 0;
}
http://www.lryc.cn/news/480347.html

相关文章:

  • ALB搭建
  • c# 动态lambda实现二级过滤(支持多种参数类型和模糊查询)
  • 第J5周:DenseNet+SE-Net实战
  • Intern大模型训练营(五):书生大模型全链路开源体系笔记
  • 聚观早报 | 比亚迪腾势D9登陆泰国;苹果 iOS 18.2 将发布
  • 微信小程序开发,诗词鉴赏app,诗词搜索实现(三)
  • Kotlin 协程使用及其详解
  • 计算机组成原理--三章四章
  • 单片机工程使用链接优化-flto找不到定义_链接静态库
  • UniTask/Unity的PlayerLoopTiming触发顺序
  • 【报错记录】Steam迁移(移动)游戏报:移动以下应用的内容失败:XXX: 磁盘写入错误
  • C 语言学习-04【结构化程序设计】
  • 机器视觉:轮廓匹配算法原理
  • 动力商城-02 环境搭建
  • 【react】Redux基础用法
  • 使用Python分析股票价格数据并计算移动平均线的实用指南
  • 如何解决FPS低的问题?代码优化方法有哪些?
  • QT信号和槽与自定义的信号和槽
  • LC:二分查找——杂记
  • GA/T1400视图库平台EasyCVR多品牌摄像机视频平台前端监控摄像头镜头的基础知识
  • 【C++】踏上C++的学习之旅(六):深入“类和对象“世界,掌握编程的黄金法则(一)
  • 【物联网技术】ESP8266 WIFI模块在STA模式下作为TCP客户端上电自动进入透传数据模式
  • 重构代码之用委托替代继承
  • 软件设计师下午题UML15分
  • css background-image背景图片轮播
  • java---认识异常(详解)
  • Linux基础学习笔记
  • 自动泊车端到端算法 ParkingE2E 介绍
  • 《手写Spring渐进式源码实践》实践笔记(第十七章 数据类型转换)
  • W3C HTML 活动