滑动窗口 /【模板】单调队列

news2024/10/7 12:27:03

day1 滑动窗口 /【模板】单调队列

题目描述

有一个长为 n n n 的序列 a a a,以及一个大小为 k k k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。

例如:

The array is [ 1 , 3 , − 1 , − 3 , 5 , 3 , 6 , 7 ] [1,3,-1,-3,5,3,6,7] [1,3,1,3,5,3,6,7], and k = 3 k = 3 k=3

输入格式

输入一共有两行,第一行有两个正整数 n , k n,k n,k
第二行 n n n 个整数,表示序列 a a a

输出格式

输出共两行,第一行为每次窗口滑动的最小值
第二行为每次窗口滑动的最大值

样例 #1

样例输入 #1

8 3
1 3 -1 -3 5 3 6 7

样例输出 #1

-1 -3 -3 -3 3 3
3 3 5 5 6 7

提示

【数据范围】
对于 50 % 50\% 50% 的数据, 1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105
对于 100 % 100\% 100% 的数据, 1 ≤ k ≤ n ≤ 1 0 6 1\le k \le n \le 10^6 1kn106 a i ∈ [ − 2 31 , 2 31 ) a_i \in [-2^{31},2^{31}) ai[231,231)

C++

讲解

数据结构在这里插入图片描述###

单调队列的删除和插入都是由数组下标的指针移动得到的,队头出队的条件头节点移出数组,

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<deque>
#include<iostream>

using namespace::std;

int n,k,num[1000009],t;
deque <int> a;//单调队列的实现依靠双向队列

int main()
{
	cin>>n>>k;
	for(int i=0;i<n;i++)
		cin>>num[i];//读入
	t=0;//队头在num数组中的位置,指针
	for(int i=0;i<n;i++)
	{
			while(!a.empty()&&a.back()>=num[i]) a.pop_back();//不优,弹出
		a.push_back(num[i]); 
		if(i-t>=k&&num[t]==a.front()) 
		{
			t++;
			a.pop_front();
			
		}
		if(i-t>=k&&num[t]!=a.front()) t++;//如果num的t在队列已经弹掉,就不用弹出
		if(i>=k-1) 
			cout<<a.front()<<' ';//注意只在窗口完全进入后再输出
	}
	cout<<endl;	
	a.clear();//清空队列,重新计算
	t=0;
	for(int i=0;i<n;i++)
	{
		while(!a.empty()&&a.back()<=num[i]) a.pop_back();
		a.push_back(num[i]); 
		if(i-t>=k&&num[t]==a.front()) 
		{
			t++;
			a.pop_front();
			
		}
		if(i-t>=k&&num[t]!=a.front()) t++;
		if(i>=k-1) 
			cout<<a.front()<<' ';
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql redis区别

一、.redis和mysql的区别总结 &#xff08;1&#xff09;类型上 从类型上来说&#xff0c;mysql是关系型数据库&#xff0c;redis是缓存数据库 &#xff08;2&#xff09;作用上 mysql用于持久化的存储数据到硬盘&#xff0c;功能强大&#xff0c;但是速度较慢 redis用于存储使…

NSS [NSSCTF 2022 Spring Recruit]ezgame

NSS [NSSCTF 2022 Spring Recruit]ezgame 前端小游戏&#xff0c;乐。

【雕爷学编程】Arduino动手做(136)---0.91寸OLED液晶屏模块3

0.91寸OLED模块引脚说明 GND ------ 地线 VCC ------ 电源 &#xff08;因为模块内部自带稳压&#xff0c;所以3.3~5V供电都是ok的&#xff09; SDA ------ I2C 数据线&#xff08;接A4&#xff09; SCL ------ I2C 时钟线&#xff08;接A5&#xff09; &#xff08;可以…

Pairwise 提高测试造数据的困难

Pairwise是L. L. Thurstone(29 May1887 – 30 September 1955)在1927年首先提出来的。他是美国的一位心理统计学家。Pairwise也正是基于数学统计和对传统的正交分析法进行优化后得到的产物。 下图是另一个项目结构 (造一个csv转测试用例) selenium的挑战者 - playwright简析 搭…

代码随想录二刷day44 | 动态规划之 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ

day44 完全背包基础知识问题描述举个栗子 518. 零钱兑换 II1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 377. 组合总和 Ⅳ1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例来推导dp数组 完全背…

Android之OkHttp框架的分析

Okhttp是Android开发常用的一个网络请求框架&#xff0c;下面将按照自己的理解将okhttp分为三条主线进行分析。 文章目录 使用方式OkHttp第一条主线&#xff1a;请求发送到哪里去了&#xff1f;OkHttp第二条主线&#xff1a;请求是如何被消费的&#xff1f;OkHttp第三条主线&a…

376. 摆动序列

如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如&#xff0c; [1, 7, 4, 9, 2, 5] 是一个 摆动序列 &…

机器学习 day24(多类分类模型)

多类分类 多类分类问题仍然是分类问题&#xff0c;所以预测y的可能结果是少量的&#xff0c;而不是无穷多个&#xff0c;且对于多类分类它&#xff1e;2 如上图&#xff1a;左侧为二分类&#xff0c;右侧为多分类&#xff0c;可以通过决策边界来划分区域

EasyExcel导出横向动态表头

需求&#xff1a;导出如下所示excel文档&#xff0c;红框内为动态表头 mysql表内数据格式如下图所示&#xff0c;由于某些特殊原因不能横向展示&#xff0c;仅能纵向展示&#xff0c;所以一个vin对应的数据可能有很多此时导出的时候上图所示的样式更便于人员观看。 依赖项 <…

VS多处理器编译提高编译速度

VS多处理器编译提高编译速度 开启多处理器编译能够提升编译速度&#xff0c;特别是当工程巨大时候&#xff0c;编译速度往往很慢&#xff0c;打开多处理器编译效果明显&#xff0c;下面给出设置和对比 开启多处理器编译 关闭多处理器编译

RabbitMQ系列(8)--实现RabbitMQ队列持久化及消息持久化

概念&#xff1a;在上一章文章中我们演示了消费者宕机的情况下消息没有被消费成功后会重新入队&#xff0c;然后再被消费&#xff0c;但如何保障RabbitMQ服务停掉的情况下&#xff0c;生产者发过来的消息不会丢失&#xff0c;这时候我们为了消息不会丢失就需要将队列和消息都标…

提高计算能力的五种方法

一旦你投入时间&#xff0c;就会 不舍得 轻易放手。 一开始可能会很浪费时间&#xff0c;但是当你练熟之后&#xff0c;效果显而易见。 二次函数&#xff1a;

php对称加密AES加密解密

AES-128-ECB和AES-256-CBC是两种常见的AES加密模式&#xff0c;它们在加密方式和安全性上有以下区别&#xff1a; 加密方式&#xff1a; AES-128-ECB&#xff1a;ECB&#xff08;Electronic Codebook&#xff09;模式是最简单的AES加密模式&#xff0c;它将数据分成固定大小的…

CSS 自定义提示(重写 title 属性)

前言 CSS 原生 title 属性太丑&#xff0c;需要重写 效果 改造 HTML 代码第2行&#xff0c;tip-label 自定义属性 <div class"tools"><div class"btn tip" v-for"item of list" :key"item.icon" :tip-label"item.l…

允许Traceroute探测漏洞和ICMP timestamp请求响应漏洞解决方法

目录 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 2、ICMP timestamp请求响应漏洞 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 详细描述 本插件使用Traceroute探测来获取扫描器与远程主机之间的路由信息。攻击者也可以利用这些信息来…

Sentinel持久化实战

前言 Sentinel有pull&#xff08;拉&#xff09;模式&#xff0c;和push&#xff08;推&#xff09;模式。本文是使用reids实现pull模式。 通过SPI机制引入自己的类 在项目的 resources > META-INF > services下创建新文件&#xff0c;文件名如下&#xff0c;内容是自…

centos7系统一键离线安装docker

离线安装脚本 # 离线安装docker rpm -Uvh --force --nodeps *.rpm # 启动docker systemctl start docker sudo systemctl daemon-reload # 设置开机自动启动docker systemctl enable docker.service下载 程序包下载地址 https://gitcode.net/zenglg/centos7_docker_offline_…

泛微E9鉴权

调用OA鉴权接口的过程 认证流程时序图 第一步、注册许可 请求地址&#xff1a; ​ http://泛微服务地址/api/ec/dev/auth/regist 请求方式&#xff1a;post 请求头部参数&#xff08;request headers&#xff09;&#xff1a; 参数名必选类型说明appid是string许可证号码…

前端学习——jsDay4

函数 函数使用 小练习 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…

【算法与数据结构】232、LeetCode用栈实现队列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;这道题要求我们用栈模拟队列&#xff08;工作上一定没人这么搞&#xff09;。程序当中&#xff0c;pus…