滑动窗口

题目

在这里插入图片描述

思路

对于一个数组区间的最值,可以开辟一个队列记录(当然这里不能叫队列只是和队列相似,习惯性叫法)。
每个区间的最值等于队首元素。扫描数组时,如果该元素大于队尾元素(取最大值时)将该队尾元素出队,直到队尾元素大小小于该元素停止出队。将数组元素加入队尾(无论该元素是否大于队尾元素都要入队)。如果队首元素不在该区间就出队。当前队首元素就是最值。
上面的方法基于模板题题解,下面给出我的理解(以求最大值为例)。

在队列中元素都是在给定区间的。因此如果新加入的元素大于队尾元素,那么该队尾元素肯定不是当前区间和接下来区间的最大值,因为新加入的元素已经是当前区间的成员了而且新加入元素索引大于队尾元素也不会是接来下一段区间的最值。如果其值优于队尾元素,那么队尾元素肯定不是当前和接下来一段区间的最值,那么该元素就不能被输出,因此队尾元素需要出队。如果该元素是当前区间的最值,那么队列会全部出队,新的元素会成为新的队首。因此需要队列一直出队,直到队尾元素大于当前元素。
队首元素就是当前队列的最大值,因为每次添加新元素会将队尾元素出队。队首元素出队除了被新元素出队,还有一种请况就是索引不在前范围,也会被出队。
这样就动态地维护一段最值。这里使用的是deque头文件。因为传统的队列是无法队尾出队。而vector效率相对较低,因此采用deque

代码

#include<iostream>
#include<bits/stdc++.h>
#include<deque>
using namespace std;
long int a[1000000];
deque<long int> mins;
deque<long int> maxs;
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
		cin>>a[i];
		
		
	for(int i=0;i<n;i++){
		if(i>=m&&mins.front()==a[i-m]) //如果队首元素不在范围内
			mins.pop_front();
		while(mins.size()>0&&mins.back()>a[i]){//如果队尾元素大于新元素就出队。因为这里是求的最小值。
			mins.pop_back();
		}
			mins.push_back(a[i]);//添加新元素
		if(i>=m-1){//输出队首元素
			cout<<mins.front();
			if(i<n-1)
			cout<<' ';
		}
	}
	cout<<endl;
	
	for(int i=0;i<n;i++){    //这里求的最大值,和上面相似。
		if(i>=m&&maxs.front()==a[i-m])
			maxs.pop_front();
		while(maxs.size()>0&&maxs.back()<a[i]){
			maxs.pop_back();
		}
		maxs.push_back(a[i]);
		if(i>=m-1){
			cout<<maxs.front();
			if(i<n-1)
			cout<<' ';
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/427929.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用Python爬取高德地图全国地铁站点信息

利用Python中的requests库进行地铁站点信息的获取,同时将数据保存在本机excel中 # 首先引入所需要的包 import requests from bs4 import BeautifulSoup import pandas as pd import json# 发送 GET 请求获取网页内容 url http://map.amap.com/subway/index.html response r…

06.QT信号和槽-1

一、信号和槽概述 在Qt中&#xff0c;用户和控件的每次交互过程称为一个事件。比如"用户点击按钮"是一个事件&#xff0c;"用户关闭窗口"也是一个事件。每个事件都会发出一个信号&#xff0c;例如用户点击按钮会发出"按钮被点击"的信号&#xff…

Ubuntu的apt、apt-get和apt-cache命令

原文&#xff1a;apt 和 apt-get 之间有什么区别&#xff1f; https://aws.amazon.com/cn/compare/the-difference-between-apt-and-apt-get/ 陈拓转载&#xff0c;2023/11/23&#xff0c;添加了举例。 apt 和 apt-get 之间有什么区别&#xff1f; apt 和 apt-get 都是命令行…

三位数反转问题易被忽略的两大细节

【题目描述】 输入一个三位数&#xff0c;分离出它的百位、十位和个位&#xff0c;反转后输出。 【样例输入】 127 【样例输出】 721 这个问题并不难&#xff0c;只需要两步&#xff1a; ①将这个三位数分离成三个数字&#xff08;参见“整数的分离与合成”一文&#xff…

lv20 QT事件5

1 事件模型 2 事件处理 virtual void keyPressEvent(QKeyEvent *event) virtual void keyReleaseEvent(QKeyEvent *event) virtual void mouseDoubleClickEvent(QMouseEvent *event) virtual void mouseMoveEvent(QMouseEvent *event) virtual void mousePressEvent(QMou…

【大厂AI课学习笔记NO.59】(12)过拟合与欠拟合

拟合就是调整参数和模型&#xff0c;让结果无限接近真实值的过程。 我们先来了解个概念&#xff1a; 偏差-方差窘境&#xff08;bias-variance dilemma&#xff09;是机器学习中的一个重要概念&#xff0c;它涉及到模型选择时面临的权衡问题。 偏差&#xff08;Bias&#xf…

自建Redis蜜罐以捕获和分析潜在攻击

一、引言 随着网络攻击的日益频繁和复杂&#xff0c;传统的防御措施往往难以应对。蜜罐作为一种主动防御技术&#xff0c;通过模拟有价值的服务来吸引攻击者&#xff0c;从而收集和分析攻击数据&#xff0c;提高网络安全性。本文将介绍如何自建一个Redis蜜罐&#xff0c;以捕获…

转转测试环境docker化实践

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程&#xff0c;一周学完让你面试通过率提高90%&#xff01;&#xff08;自动化测试&#xff09; 测试环境对于任何一个软件公司来讲&#xff0c;都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几…

【开源】JAVA+Vue.js实现农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

MS1030超声波流量高精度测量电路

产品简述 MS1030 是一款针对超声波流量高精度测量电路&#xff0c;它具有高 精度&#xff0c;高稳定性&#xff0c;高效率的特点。它的测量精度 15ps &#xff0c;测量范 围 500ns  4ms4MHz 。在第一波模式情况下&#xff0c;内部比较器的 offset 可编程范围为 127…

type.GetFields() 获取不到,改用type.DeclaredFields

StatisticQuery 类 private Dictionary<string, DateTime> GetTBHBDate(StatisticQuery model, string field){Dictionary<string, DateTime> dic new Dictionary<string, DateTime>();DateTime TB new DateTime();//同比开始日期 &#xff08;年&#xff…

计网面试题整理下

1. HTTP常见的状态码有哪些&#xff1f; 常见状态码&#xff1a; 200&#xff1a;服务器已成功处理了请求。 通常&#xff0c;这表示服务器提供了请求的网页。301 &#xff1a; (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时&am…

揭秘测试工程师的6大必备技能!你也常遇到这个问题吗?

作为一名Tester&#xff0c;无论是面试还是工作&#xff0c;我们都常常会遇到该问题&#xff0c;毕竟现在大部分接手的项目都是中小型的项目&#xff0c;很多又是生疏行业的系统&#xff0c;所以这个问题就会常常伴随我们&#xff0c;那么遇到这个问题该怎么办呢&#xff0c;现…

淘宝1688京东商品采集API接口系列,item_get-获得淘宝商品详情

请求示例&#xff0c;API接口接入Anzexi58 商品采集API接口系列 商品搜索API&#xff1a; 功能&#xff1a;根据关键词、分类、价格范围等条件搜索商品。参数&#xff1a;关键词、分类ID、价格范围、品牌等。返回&#xff1a;商品列表&#xff0c;包括商品ID、名称、价格、图片…

【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 一、仿函数1.1 仿函数的介绍1.2 仿函数的优势 二、priority_queue2.1 push2.2 pop2.3 top2.4 size2.5 empty 三、…

[Java 探索之路~大数据篇] 新时代大数据流处理入门指南

本文主要介绍大数据基础&#xff0c;以及 flink 流计算 文章目录 【基础知识】1. 批处理与流处理1.批处理2.流处理 2. 为什么需要一个优秀的流处理框架1. 股票交易的业务场景2.生产者——消费者模型3. 流处理框架要解决的诸多问题&#xff08;1&#xff09;可扩展性&#xff08…

自定义View中的ListView和ScrollView嵌套的问题

当我们在使用到ScrollView和ListView的时候可能会出现显示不全的问题。那我们可以进行以下分析 ScrollView在测量子布局的时候会用UNSPECIFIED。通过源码观察&#xff0c; 在ScrollView的onMeasure方法中 Overrideprotected void onMeasure(int widthMeasureSpec, int heightMe…

C++ 类的大小 原理+详细计算示例

大小的组成 类的大小受&#xff1a;基类&#xff0c;成员&#xff0c;虚基表指针&#xff0c;虚函数表指针 影响。 计算方式 需要按照下列要素对齐和规则计算对齐&#xff1a; 对齐要素 编译器默认对齐数 根据环境改变&#xff0c;一般32位为4&#xff0c;64位为8。 有效…

KMP算法模板

KMP算法模板 自用&#xff0c;相关题解参考

电瓶车充电安全谈|南京小区15死44伤火灾背后的思考

今年2月23日&#xff0c;南京雨花台区明尚西苑居民楼发生了一起重大火灾事故&#xff0c;在事故中&#xff0c;共有59人受到不同程度的伤害&#xff0c;遇难的有15人&#xff0c;另有44人在医院接受治疗。 南京雨花台区火灾的发生无疑是一场令人痛心的悲剧&#xff0c;这场事故…