【算法简述】基础数据结构-单调队列

数据结构与算法:单调队列 单调队列 阅读详情


它的队首和普通的队列一样,只能删除元素,而它的队尾既可以添加元素也可以删除元素。 他随队尾输出,出队。

单调队列的作用&原理

就是用来维护一段区间内的单调上升,下降性质,导出性质就是也可以用来维护一个区间内的值。他的原理是这样的:
在这里插入图片描述重复一遍,队列1,2,-3,-4,2.如果元素a入队,从队尾弹出所有大于a的值,再把a加紧队尾。

  1. 1带入队列,为了初始化。
  2. 2带入队列,因为1比2小,此时队列为1,2
  3. -3代入队列,有哪位-3比1,2都小,弹出1,2,-3带入队列
  4. -4带入队列,因为-4<-3,所以弹出-3,带入-4,此时为-4.
  5. 2带入队列,因为2大于-4,所以,此时为2,-4.

从队尾到队首开始遍历,如果碰到元素比待入队元素要小,那么这个元素便失去了作因为维护的是最大值,如果有一个比当前值小,那它一定不是最大的,将其出队。直到碰到一个比当前值大的元素,跳出循环;


题目组织代码

题目描述

现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。
在这里插入图片描述

例如:

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

输入格式

输入一共有两行,第一行为n,k。

第二行为n个数(<INT_MAX). 输出格式

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

第二行为每次窗口滑动的最大值 输入输出样例 输入 #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%的数据,n<=10^5

100%的数据,n<=10^6

接下来,我给大家讲一讲例子的实现过程:

1 3 -1 -3 5 3 6 7

连续三个数,所以有:
【1,3,-1】【3,-1,-3】【-1,-3,5】【-3,5,3】【5,3,6】【3,6,7】
从中选出最大和最小:
-1 -3 -3 -3 3 3
3 3 5 5 6 7

那么分析完样例——单调队列做这个题就行了

#include<bits/stdc++.h>
using namespace std;
int n,m;
int s[1000001],s2[1000001];
int a[1000001];
int minn(){
    int u=1,v=0;//u表示队头元素,v表示队尾元素
    for(int i=1;i<=n;i++){
        while(u<=v&&s[u]+m<=i) u++;//如果队尾元素大于队头元素,就如入队
        while(u<=v&&a[i]<a[s[v]]) v--;//若果队尾元素比我们要继续处理的值大,此时,队尾元素就不能入队,接下来出队
        s[v++]=i;// 存到队列
        if(i>=m) cout<<a[s[u]]<<" ";
    }
    cout<<endl;
}
int maxn(){
    int u=1,v=0;//u表示队头元素,v表示队尾元素
    for(int i=1;i<=n;i++){
        while(u<=v&&s2[u]+m<=i) u++;//如果队尾元素大于队头元素,就如入队
        while(u<=v&&a[i]>a[s2[v]]) tv-;//若果队尾元素比我们要继续处理的值大,此时,队尾元素就不能入队,接下来出队
        s2[v++]=i;// 存到队列
        if(i>=m) cout<<a[s2[u]]<<" ";
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    minn();
    maxn();
    return 0;
}
详解单调队列算法 在上一篇文章中,我们介绍了「单调栈」这一最常考察的线性数据结构。而今天我们将继续沿着这个思路,介绍另一个与其 “齐名” 的线性数据结构,即「单调队列」。 「单调队列」在「数据结构」题中的分布较为广泛,且常被当作优化「动态规划」的一种重要手段,因此该算法在面试中考察的频率较高,属于必知必会的知识点。 阅读详情

相关推荐

数据结构与算法面试:单调栈与单调队列

本文旨在帮助准备技术面试的开发者深入理解单调栈(Monotonic Stack)和单调队列(Monotonic Queue)的原理、适用场景及实现方式。通过对比两者的特性、典型算法和实战案例,提炼面试高频问题的解题思路,提升应对“有序性元素关系”问题的能力。核心概念:定义、特性、与普通栈/队列的区别算法原理:单调栈的“Next Greater Element”算法,单调队列的“滑动窗口最大值”算法数学分析:时间复杂度证明、空间复杂度分析实战案例:LeetCode经典题目解析(含完整代码)

AI天才研究院 1161

Leetcode单调队列、优先队列(堆)、单调栈、归并排序刷题总结

数据结构补充

studyForMokey的博客 1133

数据结构进阶:单调队列在算法竞赛中的高级用法

在算法竞赛中,“时间复杂度”是选手的生命线。当遇到“滑动窗口最值”“最长满足条件子数组”“动态规划状态转移优化”等问题时,普通数组或优先队列(堆)往往因时间复杂度太高(如O(nk)或O(n logk))无法通过时间限制。此时,单调队列以其O(n)的均摊时间复杂度,成为解决这类问题的“秘密武器”。本文将聚焦单调队列的高级用法,覆盖从原理到竞赛实战的全流程。本文从“生活故事引入→核心概念拆解→算法原理详解→竞赛真题实战→扩展场景应用”逐步展开,最后通过思考题和常见问题解答巩固知识体系。单调队列。

AI 算法实战派 872

单调队列-原理详解(deque实现)

一、单调队列的概念: 单调队列,即单调递减或单调递增的队列。 二、单调队列的性质: 1. 队列中的元素在原来的列表中的位置是由前往后的(随着循环顺序入队)。 2. 队列中元素的大小是单调递增或递减的。 三、单调队列的特点: 从队尾入列,队首或队尾出列。 四、例题分析: 那么单调队列用什么用呢?单调队列一般用于求区间内的最值问题。看几道题,理解上述内容: 1. 洛谷P1886 ...

Gaoithe的博客 1万+

MATPOWER下载安装教程

将MATPOWER文件复制在C:\Program Files (x86)\MATLAB\R2016b\bin目录下。原来的窗口中多了很多文件路径,点击【保存】,再点击【关闭】选择所要添加的MATPOWER文件夹,点击【选择文件夹】二、将MATPOWER放在bin目录下。找到菜单栏的【设置路径】点击【添加并包含子文件】一、从官网下载后解压。

weixin_47365903的博客 2万+

RAID 0/1/5/10 性能实测:4块 SATA SSD 组阵列,顺序读写速度对比

本文通过实测对比了RAID 0/1/5/10在4块SATA SSD上的顺序读写性能,详细展示了不同RAID级别的配置方法、理论性能与实际测试数据。测试结果显示,RAID 0在顺序读写速度上表现最佳,而RAID 10则在性能与数据安全之间取得了平衡,适合数据库服务器等关键应用场景。

weixin_33462167的博客 424

单调队列

什么是单调队列 单调队列,即单调递减或单调递增的队列。使用频率不高,但在有些程序中会有非同寻常的作用。 单调队列的作用 不断地向缓存数组里读入元素,也不时地去掉最老的元素,不定期的询问当前缓存数组里的最小/最大的元素。 最直接的方法:普通队列实现缓存数组。 用堆实现缓存数组 运行耗时 堆顶始终是最小/最大元素,进队出队都是O(1)。 一次查询需要遍历当前队列的所有元素,故O...

qq_41268947的博客 240

ESP32Servo库驱动SG90舵机:从入门到精准控制

本文详细介绍了如何使用ESP32Servo库驱动SG90舵机,从硬件连接到软件环境搭建,再到编写示例程序实现精准控制。内容涵盖库安装、基础驱动代码解析、舵机校准方法以及平滑运动控制,帮助开发者快速掌握ESP32控制舵机的核心技能,并提供了电源管理、信号抗干扰等实用避坑指南。

ik678901的博客 897

单调队列算法总结

单调队列算法总结

编程猿来如此 1266

北斗导航 | 卫星信号捕获跟踪原理解析

卫星信号的捕获与跟踪是导航接收机的"眼睛",其性能直接决定定位精度、动态适应性和抗干扰能力。随着北斗三号全球组网完成,新一代接收机正朝着。两大核心阶段,二者共同构成定位的基础。调制,频谱主瓣宽度达4.092MHz,较传统BPSK调制抗干扰能力提升3dB[38]。的目标持续演进,在自动驾驶、精密农业等领域展现出巨大应用潜力。二维空间中搜索峰值相关能量[4]。卫星导航接收机对信号的处理可分为。北斗三号B1C/B2a信号采用。北斗三号新增的B1C信号采用。

尘世冰封的专栏 773

第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门

vben5 快速入门。 Vben Admin 框架新出的版本V5.5.4,而之前的Vben Admin 2.x 目前已存档,仅进行重大问题修复。之前在2.x版本曾经简单完成了一版专栏文章,当时也是收获了一些好评和建议。本次决定在v5 版本基础上再完成一次前后端的搭建。希望大家继续多多支持。项目精简后,再次启动项目,执行 pnpm run dev点击登录,可以看到接口报错,现在前端请求的后端有报错,下一节处理这部分逻辑。

cuiwin的专栏 7068

数据结构:单调队列

2.检查队尾:如果队尾的元素>要添加的值,如果这个值加上去队列就不会保持单调性,所以要弹出队尾元素,对应t减一。1.检查队首:如果队首指向的下标<=i-k即队首元素已经跑出了k长度即[i-k+1,i]这个区间,那么就要将队首元素弹出来,对应将h加一。单调队列和单调栈很像,就是一个维护了单调性的队列数据结构,可以是单调递增的也可以是单调递减的。4大于队尾元素2,把2弹出,4小于8,直接将4加到8后面。注:队首指向0,队尾指向-1,默认队列里面没有元素。1.单调队列的队首和普通的队列一样,只能删除元素。

weixin_73048230的博客 185

SAP-RPT-1 深度解读:面向企业表格数据的 rapid one

摘要: SAP在TechEd 2025大会上推出面向企业结构化数据的SAP-RPT-1(Relational Pretrained Transformer),旨在通过in-context learning直接预测表格数据中的缺失值,无需传统机器学习流程。与LLM不同,RPT专为业务表格设计,支持实时预测(如交货延迟、回款风险等)。提供Small(高吞吐)、Large(高精度)和开源版本,用户可通过无代码Playground(上传CSV并用[PREDICT]标记目标列)或Python API快速验证。典型场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 236

【数据结构与算法】单调队列 | 单调栈

本篇博客主要讲解了两个非常实用的数据结构:单调队列和单调栈、用单调队列解决 LeetCode 中的滑动窗口最大值问题、用单调栈解决 LeetCode 中的每日问题和牛客网中的指标 A 的最大值问题等。

joy.728的博客 1332

第55篇:数据隐私保护技术盘点——差分隐私、同态加密与它们的坑(踩坑总结)

数据隐私保护是AI工程化中必须严肃对待的课题。差分隐私和同态加密是两把利器,但也都是“重武器”,使用不当反而会伤及自身。差分隐私像“模糊处理”,通过加噪来保证统计安全性,要小心管理隐私预算和效用权衡。同态加密像“保险箱里打算盘”,保证了计算的精确性,但必须承受巨大的性能和工程复杂度代价。我的建议是:从小规模实验开始,先用DP-SGD在MNIST/CIFAR-10等标准数据集上感受噪声与精度的关系;再用TenSEAL等易用的库尝试一个加密逻辑回归,体会密文膨胀和速度延迟。

ai_blue_pm的博客 281

11.1华为OD机试真题 新系统 - 整理学生编号 (Java/Py/C/C++/Js/Go)

11.1华为OD机试真题 新系统 - 整理学生编号 (Java/Py/C/C++/Js/Go)

算法大师! 395

算法基础_数据结构【单链表 + 双链表 + 栈 + 队列 + 单调栈 + 单调队列】

本篇博客是《算法基础_数据结构》的算法题型总结+模板习题练习。主要算法涉及:单链表、双链表、栈、队列、单调栈、单调队列的算法。

序属秋秋秋的博客 1557

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

单调队列和单调栈详解

这里是我的blog:有更多算法分享=v= https://endlesslethe.com/monotone-queue-and-stack-tutorial.html 前言 单调栈和单调队列算是栈和队列的高级应用吧,在公司面试中应该是不怎么会出现的(除非算法岗?)。因为原理比较简单,网络上的相关资料反而对于这两个东西说得都不甚清楚,尤其是它们的应用方法。最基本的两本中文算法书“紫书”和“白皮”都

小楼吹彻玉笙寒 6600

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【算法】单调队列

算法学习笔记之单调队列

Eristic0618的博客 1654

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

浅谈单调队列

单调队列是指:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。 队列是一种先进先出(FIFO First In First Out)的数据结构,它类似于下面这幅图: 队列的进出方式类似于平时我们排队打饭,来排队的人从队尾进入,打完饭的人从队头弹出。 队列的在程序中储存的方式有很多,OI中最为常用的是使用头指针head和尾指针tail进行存储 头指针指...

月殇 2万+

单调队列(C/C++)

单调队列是一种非常有用的数据结构,可以高效地解决需要维护窗口内最值的问题。使用单调队列的时间复杂度为O(n),其中n为输入数组的长度。t=N7T8t=N7T8t=N7T879. 滑动窗口的最大值 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/description/75/滑动窗口 /【模板】单调队列 - 洛谷https://www.luogu.com.cn/problem/P1886。

闻道有先后,术业有专攻 4726

【算法与数据结构】单调队列

是一种特殊的队列,队列中的元素按严格递增或者递减排列。这样就可以保证队头元素始终是最大值或者最小值。【问题引入】有一个数组,长度为n,给你一个区间[left,right],求出该区间内的最小值或者最大值。我们如果进行普通的遍历,最坏的情况下时间复杂度是O(N),遍历整个数组。而我们如果用单调队列来维护这段区间,始终保持队列的单调性,就可以在O(1)的时间内找到该区间的最大值或者最小值,就是。【结论】

2401_82677021的博客 1251

基础算法篇(4)(蓝桥杯常考点)—数据结构(进阶)

这期将会讲到基础算法篇里面的数据结构(进阶),主要包括单调栈,单调队列,并查集,扩展域并查集,带权并查集,字符串哈希,Trie树。

刃神太酷啦的博客 4164

数据结构——单调队列

这篇博客我们来讨论一下单调队列的问题,其实和之前学的单调栈都是一种上通过改变操作来解决问题的一种我们先来回忆一下的内容,这样方便将其和做区分1.单调栈是一种,只能在栈顶进行插入和删除操作。2.单调栈的特点是栈中的元素按照,常用的有单调递增和单调递减。3.在插入新元素时,如果新元素破坏了当前的单调性,则从,直到满足单调性 要求。这样可以保证栈中的元素保持单调性。4.单调栈的典型应用是在单调队列:1.单调队列是一个,支持在队列两端进行插入和删除操作。

2301_80475191的博客 1293

【数据结构与算法】单调队列的定义和运用

“当一个选手比你小还比你强时,你就应该退役了”——双端队列的扩展-单调队列的生动诠释 用于解决滑动窗口问题,常数小,代码简洁易懂,用好有奇效(

起床气233的博客 743

单调队列的实现

这是C++算法基础-数据结构专栏的第二十五篇文章,详细讲解了单调队列的定义、过程、性质、代码实现等内容。

wyuchen123的博客 1604
上一篇: 【算法简述】基础数据结构-单调栈
下一篇: 题解-翻棋子
Cancelleds
博客等级 码龄8年 1110粉丝 166原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值