滑动窗口

题目

在这里插入图片描述

思路

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

在队列中元素都是在给定区间的。因此如果新加入的元素大于队尾元素,那么该队尾元素肯定不是当前区间和接下来区间的最大值,因为新加入的元素已经是当前区间的成员了而且新加入元素索引大于队尾元素也不会是接来下一段区间的最值。如果其值优于队尾元素,那么队尾元素肯定不是当前和接下来一段区间的最值,那么该元素就不能被输出,因此队尾元素需要出队。如果该元素是当前区间的最值,那么队列会全部出队,新的元素会成为新的队首。因此需要队列一直出队,直到队尾元素大于当前元素。
队首元素就是当前队列的最大值,因为每次添加新元素会将队尾元素出队。队首元素出队除了被新元素出队,还有一种请况就是索引不在前范围,也会被出队。
这样就动态地维护一段最值。这里使用的是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<<' ';}}
}

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

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

相关文章

Effective C++ 学习笔记 条款07 为多态基类声明virtual析构函数

有许多种做法可以记录时间&#xff0c;因此&#xff0c;设计一个TimeKeeper base class和一些derived classes作为不同的计时方法很合理&#xff1a; class TimeKeeper { public:TimeKeeper();~TimeKeeper();// ... };class AtomicClock : public TimeKeeper { /* ... */ }; …

DM数据库学习之路(二十)DM8基于主备集群技术的两地三中心集群部署及测试(全网最详细)

DM两地三中心介绍 摘要 金融行业对数据的可靠性和连续性有着极其严格的要求,任何数据丢失或服务中断都可能导致严重的经济损失。针对这一问题,基于达梦主备集群技术的两地三中心解决方案能够切实有效解决业务数据的可靠性和连续性需求。该方案通过构建两个数据中心和一个灾备…

MyBatis标签获取数组或者集合长度的方法

1、判断列表长度&#xff1a; <if test"list ! null and list.size() > 0">... </if> 可结合in条件使用&#xff1a;SELECT * FROM users<where><if test"idList ! null and idList.size() > 0">id IN<foreach item"…

leetcode热题100学习计划-链表-相交链表

思路 两条链表长短不一&#xff0c;找公共交点必须先对齐。记录两个链表各自长度&#xff0c;长的向短的看齐&#xff0c;长的先走多出来的那么一截&#xff0c;之后两者一起走&#xff0c;直到相遇或抵达末尾 代码 /*** Definition for singly-linked list.* public class …

解密Lawnchair:打造个性化极致的Android桌面体验

解密Lawnchair&#xff1a;打造个性化极致的Android桌面体验 1. 简介 Lawnchair是一款知名的Android桌面定制工具&#xff0c;旨在为用户提供个性化极致的桌面体验。作为一个开源项目&#xff0c;Lawnchair融合了简洁、灵活和强大的特点&#xff0c;让用户能够自由定制其Andro…

Python | Conda安装包报错:PackagesNotFoundError

Conda在下载安装包时报错&#xff1a; PackagesNotFoundError: The following packages are not available from current channels:- XXXXXX&#xff08;包名&#xff09;有如下两种解决方法&#xff1a; 方法一&#xff1a;将conda-forge添加到搜索路径上 在命令行运行下方指令…

深入理解C语言:开发属于你的三子棋小游戏

三子棋 1. 前言2. 准备工作3. 使用二维数组存储下棋的数据4. 初始化棋盘为全空格5. 打印棋盘6. 玩家下棋7. 电脑下棋8. 判断输赢9. 效果展示10. 完整代码 1. 前言 大家好&#xff0c;我是努力学习游泳的鱼&#xff0c;今天我们会用C语言实现三子棋。所谓三子棋&#xff0c;就是…

Android 开发环境搭建的步骤

本文将为您详细讲解 Android 开发环境搭建的步骤。搭建 Android 开发环境需要准备一些软件和工具&#xff0c;以下是一些基础步骤&#xff1a; 1. 安装 Java Development Kit (JDK) 首先&#xff0c;您需要安装 Java Development Kit (JDK)。JDK 是 Android 开发的基础&#xf…

TS总结10、ts的 class 类型(配置项strictPropertyInitialization、非空断言)

一、简介 1.类(class)是面向对象编程的基本构件,封装了属性和方法 1.1、属性的类型:类的属性可以在顶层声明,也可以在构造方法内部声明,如果不给出类型;TypeScript 会认为x和y的类型都是any;如果声明时给出初值,可以不写类型,TypeScript 会自行推断属性的类型; c…

【Android 内存优化】怎么理解Android PLT hook?

文章目录 前言什么是hook?PLT hook作用基本原理PLT hook 总体步骤 代码案例分析方案预研面临的问题怎么做&#xff1f;ELFELF 文件头SHT&#xff08;section header table&#xff09; 链接视图&#xff08;Linking View&#xff09;和执行视图&#xff08;Execution View&…

2核4G服务器咋收费的?阿里云贵不贵?

阿里云2核4G服务器多少钱一年&#xff1f;2核4G配置1个月多少钱&#xff1f;2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

YOLO-World 简单无需标注无需训练直接可以使用的检测模型

参考: https://github.com/AILab-CVC/YOLO-World YOLO-World 常规的label基本不用训练,直接传入图片,然后写入文本label提示既可 案例demo: 1)官方提供 https://huggingface.co/spaces/stevengrove/YOLO-World https://huggingface.co/spaces/SkalskiP/YOLO-World 检测…

基于信息间隙决策理论的碳捕集电厂优化调度程序代码!

适用平台&#xff1a;MatlabYalmipCplex 程序在建立电厂与碳捕集装置协同调度模型的基础上&#xff0c;引入信息间隙决策理论(information gap decision theory, IGDT)以同时满足系统的鲁棒性和经济性要求&#xff0c;通过风险追求和风险规避&#xff12;种决策角度得到不同的…

移动端1px问题,使用vant配合rem后需要处理成1.5px或者2,3,等等,不然ios上显示不出来1px的边框

table{td {border: 1.5px solid #ccc;font-family: PingFang SC, PingFang SC;font-weight: 400;font-size: 24px;color: #4E5464;line-height: 28px;text-align: center;empty-cells: show;padding: 20px 10px;height: 80px;white-space: nowrap;} }table的td样式&#xff0c…

93. 复原 IP 地址(力扣LeetCode)

文章目录 93. 复原 IP 地址题目描述回溯算法回溯优化&#xff08;在原s字符串上操作&#xff09; 93. 复原 IP 地址 题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’…

真不愧是华为出来的,真的太厉害了。。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 实习去了博彦科技&#xff08;外包&#xff09;&#xff0c;做的就是螺丝钉的活&#xff0c;后面…

华为---MSTP(一)---MSTP生成树协议

目录 1. MSTP技术产生背景 2. STP/RSTP的缺陷 ​编辑 2.1 无法均衡流量负载 2.2 数据使用次优路径 3. MSTP生成树协议 3.1 MSTP相关概念 3.2 MSTP树生成的形成过程 4. MSTP报文 1. MSTP技术产生背景 RSTP在STP基础上进行了改进&#xff0c;实现了网络拓扑快速收敛。但…

chisel入门初步2_2——-1/2次方生成器

由之前的GCN网络的介绍可以得知&#xff0c;我们需要输入两个乘数&#xff08;两个节点的节点度&#xff09;&#xff0c;并输出他们乘积的-1/2次方&#xff0c;此处由于当时设计的booth编码的乘法器为有符号数&#xff0c;而此处是无符号数&#xff0c;实在懒得再写一份了&…

SpringBoot+Maven项目打包

项目的主POM文件里面添加maven打包插件 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><sour…

推荐一款新的自动化测试框架:DrissionPage

今天给大家推荐一款基于Python的网页自动化工具&#xff1a;DrissionPage。这款工具既能控制浏览器&#xff0c;也能收发数据包&#xff0c;甚至能把两者合而为一&#xff0c;简单来说&#xff1a;集合了WEB浏览器自动化的便利性和 requests 的高效率优点。 一、DrissionPage框…