滑动窗口最大值和最小值

题目:

思路:

窗口进行滑动时,需要快速获取min和max,因此需要一个结构来保存最值,而不是临时计算。动态的最值更新容易联想到单调栈,但是这里需要频繁增删元素,因此用双端队列,front删除移除窗口的元素,back增添移入窗口的元素。
创建两个双端队列,一个记录窗口最小值,一个记录窗口最大值。
最小值双端队列中递增排序,首元素就是当前窗口中的最小值。每次窗口移动1位,首先判断位于队首的元素是否被移除窗口,如果是,出队,否则将新元素与队尾元素比较,如果大于队尾元素直接入队,否则将队尾元素出队,直至新元素入队,作为备选的最小值。
最大值双端队列中递减排序,其他操作与最小值双端队列类似。

代码:

#include<iostream>
#include<vector>
#include<deque>
using namespace std;void slidingWindow(const vector<int>& arr, int k, vector<int>& mins, vector<int>& maxs)
{deque<int> min_q, max_q;for (int i = 0; i < arr.size(); i++){//移除不在窗口中的元素while (!min_q.empty() && min_q.front() <= i - k)min_q.pop_front();while (!max_q.empty() && max_q.front() <= i - k)max_q.pop_front();//维护最小值队列while (!min_q.empty() && arr[i] <= arr[min_q.back()])min_q.pop_back();min_q.push_back(i);//维护最大值队列while (!max_q.empty() && arr[i] >= arr[max_q.back()])max_q.pop_back();max_q.push_back(i);//当窗口形成时记录结果if (i >= k - 1){mins.push_back(arr[min_q.front()]);maxs.push_back(arr[max_q.front()]);}}
}int main()
{int n, k;cin >> n >> k;vector<int> arr(n);for (int i = 0; i < n; i++)//获取数组cin >> arr[i];vector<int> mins, maxs;slidingWindow(arr, k, mins, maxs);for (int num : mins)cout << num << " ";cout << endl;for (int num : maxs)cout << num << " ";cout << endl;return 0;
}

 运行结果:

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

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

相关文章

JVM——对象创建全家桶:JVM中对象创建的模式及最佳实践

引入 在 Java 应用开发中&#xff0c;对象创建是最基础且高频的操作&#xff0c;但往往也是性能优化的关键切入点。想象一个在线阅读平台&#xff0c;每天需要创建数百万个 Book 对象来统计阅读数据。如果每个对象的创建过程存在内存浪费或性能瓶颈&#xff0c;累积效应将导致…

VSCode中PHP使用Xdebug

本地环境 windows10php8.2 ntsxdebug v3thinkphp v8 下载Xdebug Xdebug下载地址 从xdebug下载地址,下载最新的xdebug,解压后将php_xdebug.dll放入php目录的ext目录下 配置php.ini [Xdebug] zend_extension php_xdebug xdebug.client_host 127.0.0.1 xdebug.client_port…

金融系统渗透测试

金融系统渗透测试是保障金融机构网络安全的核心环节&#xff0c;它的核心目标是通过模拟攻击手段主动发现系统漏洞&#xff0c;防范数据泄露、资金盗取等重大风险。 一、金融系统渗透测试的核心框架 合规性驱动 需严格遵循《网络安全法》《数据安全法》及金融行业监管要求&am…

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…

PHP 项目中新增定时任务类型的详细步骤(以 CRMEB 为例)

1.首先需要在下面文件中增加定时任务类型 2.在app\services\system\crontab\CrontabRunServices类中增加第一步中与定时任务类型同名的方法&#xff0c;注意需要下划线转小驼峰 例如定时任务的类型为&#xff1a;order_tick,而在CrontabRunServices类中的方法名称为&#xff1…

Day27 函数专题2:装饰器

1.装饰器的思想&#xff1a;进一步复用 装饰器&#xff08;Decorator&#xff09;是 Python 中一种强大的编程工具&#xff0c;核心作用是在不修改原函数代码的前提下&#xff0c;为函数添加额外功能&#xff08;如日志记录、性能统计、权限校验等&#xff09;。它充分利用了 …

Qt进阶开发:动画框架的介绍和使用

文章目录 一、QPropertyAnimation 简介二、基本用法三、常用属性和方法四、支持的属性&#xff08;部分常用&#xff09;五、多个动画组合六、使用缓和曲线七、状态机框架 一、QPropertyAnimation 简介 #include <QPropertyAnimation>QPropertyAnimation 可以让你在一段…

IP选择注意事项

IP选择注意事项 MTP、FTP、EFUSE、EMEMORY选择时&#xff0c;需要考虑以下参数&#xff0c;然后确定后选择IP。 容量工作电压范围温度范围擦除、烧写速度/耗时读取所有bit的时间待机功耗擦写、烧写功耗面积所需要的mask layer

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…

filebeat原理架构

Filebeat 是基于 Golang 开发的轻量级日志采集 Agent&#xff0c;其核心架构设计围绕高效、可靠地采集与转发日志数据&#xff0c;主要组件和工作流程如下&#xff1a; ‌一、核心架构组件‌ ‌输入 (Inputs)‌ 负责监控指定的日志源&#xff08;如文件路径、日志文件&#x…

Air8000开发板新资料开放!多功能+高扩展特性全面解锁

Air8000开发板最新技术资料正式向开发者开放。这个开发板集多功能与高扩展性于一身&#xff0c;将为物联网、嵌入式系统等领域的创新项目提供更强大的技术支持&#xff0c;助力开发者快速实现创意落地。 工程师朋友们&#xff0c;Air8000开发板“多功能集成高扩展性”&#xff…

如何迁移Cordova应用到HarmonyOS 5 以及迁移时常见的问题?

以下是 Cordova 应用迁移至 HarmonyOS 5 的完整方案及常见问题解决方案&#xff0c;结合最新技术实践整理&#xff1a; 一、迁移流程 1. ‌方案选择‌ ‌方案‌‌适用场景‌‌操作复杂度‌‌Android 兼容层方案‌简单应用快速上线低&#xff08;无需修改代码&#xff09;‌原…

板凳-------Mysql cookbook学习 (十--4)

6.3 设置客户端时区 --客户端位于不同时区需要注意&#xff0c;如果位于同一时区则不需要关心 mysql> drop table if exists t; Query OK, 0 rows affected (0.06 sec)mysql> create table t (ts timestamp); Query OK, 0 rows affected (0.05 sec)mysql> insert int…

如何根据excel表生成sql的insert脚本

根据excel自带的vba宏进行操作 首先altF11 点击插入~模块 录取执行语句 Sub GenerateSQL()Dim lastRow As IntegerlastRow Cells(Rows.Count, 1).End(xlUp).RowFor i 2 To lastRow 假设第一行是标题Cells(i, "S").Value "INSERT INTO table_name (ID, RE…

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…

开疆智能ModbusTCP转Canopen网关连接AB PLC与台达伺服通讯案例

本案例是罗克韦尔PLC通过开疆智能ModbusTCP转Canopen网关连接台达A2伺服的配置案例。 配置方法&#xff1a; 首先打开PLC配置软件“Studio5000”并新建项目导入通讯文件 对功能块进行设置 填写本地IP地址以及服务区IP地址以及寄存器 填写寄存器地址数量及使能 确认无误后将配置…

用 LoRA 对 Qwen2.5-VL 模型进行SFT - LoRA微调流程

用 LoRA 对 Qwen2.5-VL 模型进行SFT - LoRA微调流程 flyfish ┌──────────────────────────────────────────────────────────────────────────┐ │ 环境准备与启动 …

熵最小化Entropy Minimization (二): 案例实施

前面介绍了熵最小化、常用的权重函数汇总、半监督学习&#xff1a;低密度分离假设 (Low-Density Separation Assumption)、标签平滑、信息最大化等相关的知识点&#xff0c;本文采用一个MNIST10分类的数据集来进一步体会它们的效果。 案例实施 对比方法 纯监督学习方法&…

联邦学习聚合参数操作详解

联邦学习中常见的模型聚合操作&#xff0c;具体用于对来自多个客户端的模型更新进行聚合&#xff0c;以得到全局模型。在联邦学习框架下&#xff0c;多个客户端在本地训练各自的模型后&#xff0c;会将模型更新&#xff08;通常是模型的权重&#xff09;发送到中央服务器&#…

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…