单调队列-求一定范围内的最大值和最小值

news2025/1/19 14:14:02

一、链接

154. 滑动窗口

二、题目

给定一个大小为 n≤106n≤106 的数组。

有一个大小为 kk 的滑动窗口,它从数组的最左边移动到最右边

你只能在窗口中看到 kk 个数字。

每次滑动窗口向右移动一个位置

以下是一个例子:

该数组为 [1 3 -1 -3 5 3 6 7],kk 为 33。

窗口位置最小值最大值
[1 3 -1] -3 5 3 6 7-13
1 [3 -1 -3] 5 3 6 7-33
1 3 [-1 -3 5] 3 6 7-35
1 3 -1 [-3 5 3] 6 7-35
1 3 -1 -3 [5 3 6] 736
1 3 -1 -3 5 [3 6 7]37

你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。

输入格式

输入包含两行。

第一行包含两个整数 nn 和 kk,分别代表数组长度和滑动窗口的长度。

第二行有 nn 个整数,代表数组的具体数值。

同行数据之间用空格隔开。

输出格式

输出包含两个。

第一行输出,从左至右,每个位置滑动窗口中的最小值。

第二行输出,从左至右,每个位置滑动窗口中的最大值。

输入样例:

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

输出样例:

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

三、题意

输入一串数字,求一定范围内的最大值和最小值

四、代码

#include<iostream>

using namespace std;

const int N=1e6+10;

int n,k,a[N],q[N];

int main()
{
    scanf("%d%d",&n,&k);
    
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    
    int hh=0,tt=-1;
    for(int i=0;i<n;i++)
    {
        if(q[hh]<i-k+1) hh++;
        while(hh<=tt&&a[q[tt]]>=a[i])
        {
            tt--;
        }
        q[++tt]=i;
        if(i-k+1>=0)
        {
            printf("%d ",a[q[hh]]);
        }
    }
    printf("\n");
    
    hh=0,tt=-1;
    for(int i=0;i<n;i++)
    {
        if(q[hh]<i-k+1) hh++;
        while(hh<=tt&&a[q[tt]]<=a[i])
        {
            tt--;
        }
        q[++tt]=i;
        if(i-k+1>=0)
        {
            printf("%d ",a[q[hh]]);
        }
    }
    
    return 0;
}

五、总结

1.单调队列来进行求解,思路是先想怎么用朴素做法来实现题目要求,在这个基础上再想怎么去优化

2.朴素做法:用队列维护一段区间,每一次遍历整个队列,求出队列的最值并输出

3.利用单调队列进行优化:一个队列里面,先考虑最小值,前一个元素比后一个元素大,前一个元素一定比后一个元素先出队列,也就是说,只要后一个元素存在,前一个元素就一定不会被用到,所以可以把比后一个元素大的前一个元素删除,那么就会形成一个单调递增的队列,输出队首元素就是要求的最小值

4.对称可以求最大值

5.单调队列和单调栈的思路非常相似,删除不会用到的元素,形成单调函数,输出单调函数的起点

6.单调栈:单调栈(模拟实现栈或者调用栈来解决这个问题) 

六、精美图片

 

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

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

相关文章

第九节 文件操作

文章目录 1. 引言2. 基本的文件操作2.1 打开文件2.1.1 mode 访问模式2.1.2 文件不存在,则创建文件2.1.3 二进制打开文件2.1.4 打开文件时&#xff0c;指定编码方式 2.2 关闭文件2.2.1 with 打开语句结构 2.3 文件的读写2.3.1 写入文件内容2.3.2 读取文件2.3.2.1 read&#xff0…

计算机网络-性能指标

计算机网络-性能指标 文章目录 计算机网络-性能指标简介速率比特速率 带宽吞吐量时延时延计算 时延带宽积往返时间网络利用率丢包率总结 简介 性能指标可以从不同的方面来度量计算机网络的性能 常用的计算机网络的性能指标有以下8个 速率带宽吞吐量时延时延带宽积往返时间利…

前端例程20230806:彩色灯珠装饰

演示 这里页面四周的彩色灯珠是会随着页面调整自动调整位置的。 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta na…

6.4.tensorRT高级(1)-UNet分割模型导出、编译到推理(无封装)

目录 前言1. Unet导出2. Unet推理总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-Unet分割模型导出、编译到…

【数据结构】Disruptor环形数组无锁并发框架阅读

Disruptor 是苹国外厂本易公司LMAX开发的一个高件能列&#xff0c;研发的初夷是解决内存队列的延识问顾在性能测试中发现竟然与10操作处于同样的数量级)&#xff0c;基于Disruptor开发的系统单线程能支撑每秒600万订单&#xff0c;2010年在QCn演讲后&#xff0c;获得了业界关注…

C++ 的 string 是用什么编码方式储存字符串的

代码 创建一个文件&#xff0c;用二进制的方式将字符串写入文件中 FileStream fs("test.txt", FileMode::Create);string str("测试文本");fs.Write((uint8_t *)str.c_str(), 0, str.length());return 0;其中 FileStream 是我对 fstream 的封装。 打开文…

p7付费课程笔记6:CMS GC

目录 前言 工作步骤 缺点 问题 前言 上一章节我们讲了串/并行GC&#xff0c;这一章节说下CMS GC。看前思考一个问题&#xff0c;并行GC与CMS GC的区别在哪里。 什么是CMS收集器 CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于…

2023年8月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先&#xff0c;来看下效果图 在线体验地址&#xff1a;https://geojson.hxkj.vip&#xff0c;并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据&#xff0…

PHP8条件控制语句-PHP8知识详解

我们昨天说了流程控制的结构有顺序结构、选择结构和循环结构。选择结构就是条件结构。 条件控制语句就是对语句中不同条件的值进行判断&#xff0c;进而根据不同的条件执行不同的语句。 在本文中&#xff0c;学习的是if语句、if…else语句、if…elseif语句和switch语句。 1、…

配置固定二级子域名远程访问内网群晖NAS 7.X版 【内网穿透】——“cpolar内网穿透”

配置固定二级子域名远程访问内网群晖NAS 7.X版 【内网穿透】 文章目录 配置固定二级子域名远程访问内网群晖NAS 7.X版 【内网穿透】前言1. 创建一条固定数据隧道2. 找到“保留二级子域名”栏位3. 重新编辑之前建立的临时数据隧道4. 进入“在线隧道列表”页面5. 在其他浏览器访问…

【山河送书第五期】:《码上行动:利用Python与ChatGPT高效搞定Excel数据分析》参与活动,送书三本!!

《码上行动&#xff1a;利用Python与ChatGPT高效搞定Excel数据分析》 前言内容提要本书亮点购买链接参与方式往期赠书回顾&#xff1a; 前言 在过去的 5 年里&#xff0c;Python 已经 3 次获得 TIOBE 指数年度大奖&#xff0c;这得益于数据科学和人工智能领域的发展&#xff0…

【MapGIS精品教程】010:空间叠置分析案例教程

文章目录 一、叠置分析介绍(一) 什么是叠加分析(二)叠加分析的分类二、叠加分析操作一、叠置分析介绍 (一) 什么是叠加分析 叠加分析是依靠把分散在不同层上的空间属性信息按相同的空间位置加到一起,合为新的一层。该层的属性由被叠加层各自的属性组合而成,这种组合可…

迈瑞监护仪ePM系列协议解析

ePM10 ePM12 ePM10M ePM12M等数据协议解析 生理参数解析如下&#xff1a; 波形数据解析如下&#xff1a;

100G光模块的应用案例分析:电信、云计算和大数据领域

100G光模块是一种高速光模块&#xff0c;由于其高速率和低延迟的特性&#xff0c;在电信、云计算和大数据领域得到了广泛的应用。在本文中&#xff0c;我们将深入探讨100G光模块在这三个领域的应用案例。 一、电信领域 在电信领域&#xff0c;100G光模块被广泛用于构建高速通…

SSL VPN

SSL工作过程 SSL&#xff08;Secure Sockets Layer&#xff0c;安全套接层&#xff09;是一种常用的加密协议 客户端发起连接请求&#xff1a;客户端向服务器发送连接请求&#xff0c;请求建立一个安全的SSL连接。 服务器响应&#xff1a;服务器接收到客户端的连接请求后&…

科技云报道:财税数字化时代,财务人实现RPA自由了吗?

企业数字化转型&#xff0c;财务是一个重要的切入点。随着数字化业务不断展开&#xff0c;新的系统、流程和数据源被不断引入&#xff0c;财务部门面临的是不断暴增的对账、处理报表、审计等日常工作。 如此大的工作量&#xff0c;即使是经验丰富的资深财务&#xff0c;也难免…

彩色CAD怎么转为黑白PDF?这些转换技巧了解一下

怎么将彩色CAD转换成黑白PDF格式呢&#xff1f;CAD文件方便编辑&#xff0c;但是不方便阅读和查看&#xff0c;将其转换成黑白色的PDF文件格式&#xff0c;浏览起来会更加方便&#xff0c;此外&#xff0c;黑白对比度高&#xff0c;使得其他人在查看或分享图纸时更容易阅读&…

【暑期每日一练】 Epilogue

目录 选择题&#xff08;1&#xff09;解析&#xff1a; &#xff08;2&#xff09;解析&#xff1a; &#xff08;3&#xff09;解析&#xff1a; &#xff08;4&#xff09;解析&#xff1a; &#xff08;5&#xff09;解析&#xff1a; 编程题题一描述输入描述&#xff1a;输…

科幻高大上的人脸识别接口

一、人脸登录系统特征识别&#x1f349; 采用人脸识别进行登陆验证&#xff0c;之后可选择步态识别数据录入或者在已经录入步态数据的情况下进行步态特征识别。这样的双重验证使得门禁系统更安全。 用户进入人脸识别区域后&#xff0c;系统将进行目标人物的人脸特征数据识别。…

前端js--剪刀石头布

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><linkrel"stylesheet"href"ht…