单调队列总结

单调队列的介绍

由于现在我也没接触过正经的单调队列的定义,因而引申为介绍,

单调队列,类似与单调栈,存储在单调队列里面的元素理应都是单调的,单调队列的基础使用deque(双端队列)去实现的,因而我们的队头和队尾都可以去实现插入和删除,因而更方便去实现单调队列的功能

适用问题场景

适用于去求一个区间里面的极值(极大值或者极小值)
 

单调队列的应用

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

题意:给你一个长度为n的序列,告诉你窗口的长度为k,然后问你滑动窗口中每次出现的最小值和最大值是什么

思路:很经典的一道单调队列题目,我们可以 用单调队列去实现滑动窗口,输出每次的到的结果,最小值或者最大值,既然要先求最小值,那么我们就用一个单调递减队列,先确定队头元素是否小于窗口覆盖范围,要是小于窗口覆盖范围,就先将队头元素弹出,然后比较加入元素比队尾元素小的,就将队尾元素弹出

然后再输出最大值,将队列中的元素全部清空,然后变成单调递增栈,还是先确定队头元素是否滑出窗口,如果滑出窗口范围就直接弹出,然后比较要加进来的元素和队尾元素的大小,如果大于队尾元素,那么就将队尾元素弹出

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
int a[1000005];
deque<int> que;//存储下标的双端队列signed main()
{cin>>n>>k;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++)//先输出最小值 {if(!que.empty()&&i-k+1>que.front()){que.pop_front();}while(!que.empty()&&a[i]<a[que.back()]){que.pop_back();}que.push_back(i);if(i>=k){cout<<a[que.front()]<<" ";}}cout<<"\n";que.clear();for(int i=1;i<=n;i++){if(!que.empty()&&i-k+1>que.front()){que.pop_front();}while(!que.empty()&&a[i]>a[que.back()]){que.pop_back();}que.push_back(i);if(i>=k){cout<<a[que.front()]<<" ";}}cout<<"\n";return 0;
} 

1438. 绝对差不超过限制的最长连续子数组

题意:就是说样例会给你一个数组,和一个限制数limit,一个区间里面的最大值和最小值的差应当小于这个限制数

用两个单调队列,一个单调队列用于存储最小值,一个单调队列用来存储最大值,最后去判断极差是否在这个限制数之内,如果处于这个限制数之内,则可以进行最大长度的更新

思路:用一个单调递增队列去记录这个区间内的最大值,用一个单调递减队列去记录区间内的最小值,然后利用滑动窗口的思想,设置一个左端的L和右端R,去遍历窗口的情况,窗口一开始应该先移动右指针,不断去扩大窗口内的元素数量知道窗口内的最大值和最小值的差值超出了限制数,一旦超出限制数就要去增加左指针缩小窗口范围

class Solution {
public:int longestSubarray(vector<int>& nums, int limit) {deque<int>qmin,qmax;int ans=0;//用于更新最大长度int l=0,r=0;while(r<nums.size()){while(!qmin.empty()&&nums[r]<nums[qmin.back()])qmin.pop_back();while(!qmax.empty()&&nums[r]>nums[qmax.back()])qmax.pop_back();qmin.push_back(r);qmax.push_back(r);while(!qmax.empty()&&!qmin.empty()&&nums[qmax.front()]-nums[qmin.front()]>limit){if(nums[l]==nums[qmax.front()])qmax.pop_front();if(nums[l]==nums[qmin.front()])qmin.pop_front();l++;}ans=max(ans,r-l+1);r++;}return ans;}
};

单调队列初总结

其实单调队列就是用于求一个区间的极值的一种方法,我们可以利用单调队列去处理某一个区间里面的极值问题,然后就会衍生出一种滑动窗口的思想

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

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

相关文章

【总线】AXI总线:FPGA设计中的通信骨干

目录 AXI4&#xff1a;高性能地址映射通信的基石 AXI4-Lite&#xff1a;轻量级但功能强大的通信接口 AXI4-Stream&#xff1a;高速流数据传输的利器 结语&#xff1a;AXI总线在FPGA设计中的重要性 大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计…

FlowUs息流开启知识管理的新纪元|FlowUs息流公开知识库

在信息爆炸的时代&#xff0c;如何高效地管理和利用知识成为了一个挑战。FlowUs知识库以其超巨的性价比&#xff0c;为用户带来了全新的解决方案。它不仅仅是一个存储信息的工具&#xff0c;更是一个能够激发创造力和提高生产力的平台。 性价比之选 FlowUs以其合理的价格&…

ChromeDriver新手教程:一步步指导Chrome 114到127版本的驱动安装

114之前版本下载链接在这里 ​​​​​​125以后版本下载链接在此&#xff0c;只有后面status是绿色对勾的才可以下载&#xff0c;驱动大版本一致就可以使用&#xff0c;不需版本号一模一样&#xff1b;下载所需版本只需点击对应的版本名称即可跳转到对应版本的下载位置。 以…

学习笔记——网络管理与运维——SNMP(基本配置)

四、SNMP基本配置 1、SNMP配置举例 整个华为数通学习笔记系列中&#xff0c;本人是以网络视频与网络文章的方式自学的&#xff0c;并按自己理解的方式总结了学习笔记&#xff0c;某些笔记段落中可能有部分文字或图片与网络中有雷同&#xff0c;并非抄袭。完处于学习态度&#x…

windows系统把桌面的文件重定向到电脑的其他分区盘

当我们使用windows系统的电脑时&#xff0c;很喜欢把一些常用的文件放到桌面上。而桌面上的文件默认都是设定在C盘下的。时间长了&#xff0c;C盘容易爆红(空间不足)。下面我将介绍一种比较简单快捷的办法来解决这种问题--就是把桌面的文件重定向到电脑的其他分区盘。 首先我们…

[蓝桥杯真题]买二赠一

蓝桥杯真题;买二赠一&#xff0c;要求赠的一价格不能超过买的两者之间最小价格的二分之一 看到这个题的时候我信心满满的一顿操作猛如虎&#xff0c;全部写出来的时候内心想着&#xff0c;稳了&#xff01;这次绝对稳了&#xff01;然而。。。答案错误。。。 我只能去看了一下…

2024年春季学期《算法分析与设计》练习15

问题 A: 简单递归求和 题目描述 使用递归编写一个程序求如下表达式前n项的计算结果&#xff1a; (n<100) 1 - 3 5 - 7 9 - 11 ...... 输入n&#xff0c;输出表达式的计算结果。 输入 多组输入&#xff0c;每组输入一个n&#xff0c;n<100。 输出 输出表达式的计…

使用dev_dbg调试

首先内核要使能两个配置才可以使用。一般内核都是打开的。 CONFIG_DEBUG_FSy CONFIG_DYNAMIC_DEBUGy 当编译选项CONFIG_DYNAMIC_DEBUG打开的时候&#xff0c;在编译阶段&#xff0c;kernel会把所有使用dev_dbg()的信息记录在一个table中&#xff0c;这些信息我们可以从/sys/k…

谷歌发布Infini-Transformer模型—无限注意力机制长度,超越极限

Transformer 是一种基于自注意力机制的深度学习模型&#xff0c;最初应用于自然语言处理领域&#xff0c;现已扩展到图像、音频等多个领域。与传统的循环神经网络 (RNN) 不同&#xff0c;Transformer 不依赖于顺序数据处理&#xff0c;能够并行计算&#xff0c;从而显著提高效率…

Havoc工具

Team端 客户端 打开后需要生成监听器和agent 监听 生成payload 最后上线 HTTPS流量 HTTP流量 心跳

【ARMv8/ARMv9 硬件加速系列 3.3 -- SVE LD2D 和 ST2D 使用介绍】

文章目录 SVE 多向量操作LD2D(加载)LD2D 操作说明LD2D 使用举例ST2D(存储)ST2D 使用举例ST2D 存储示例代码ld2d 和 st2d 小结SVE 多向量操作 在ARMv8/9的SVE (Scalable Vector Extension) 指令集中,st2d和ld2d指令用于向量化的存储和加载操作,具体地,它们允许同时对两个…

物联边缘网关如何助力工厂实现智能化生产?以某智能制造工厂为例-天拓四方

随着工业4.0的深入推进&#xff0c;智能制造工厂成为了工业发展的重要方向。在这个背景下&#xff0c;物联边缘网关以其独特的优势在智能制造工厂中发挥着越来越重要的作用。以下将通过一个具体的智能制造工厂应用案例&#xff0c;来阐述物联边缘网关如何助力工厂实现智能化生产…

超级签名源码/超级签/ios分发/签名端本地linux服务器完成签名

该系统完全在linux下运行&#xff0c;不存在使用第三方收费工具&#xff0c;市面上很多系统都是使用的是第三方收费系统&#xff0c;例如&#xff1a;某心签名工具&#xff0c;某测侠等&#xff0c;不开源而且需要每年交费&#xff0c;这种系统只是在这些工具的基础上套了一层壳…

java文件传输小工具 java17+springboot3+thymeleaf

背景 在和同事工作中经常需要传输文件&#xff0c;但是公网传输太慢&#xff0c;业务方不是计算机专业直接用命令行沟通麻烦。 本小工具通过页面可视化方便用户使用&#xff0c;端口9090&#xff0c;启动默认展示当前登陆本机用户的桌面。 代码开源&#xff1a; https://git…

522. 最长特殊序列 II

题目 给定字符串列表 strs &#xff0c;返回其中最长的特殊序列的长度。如果最长特殊序列不存在&#xff0c;返回 -1。 特殊序列定义如下&#xff1a;该序列为某字符串独有的子序列&#xff08;即不能是其他字符串的子序列&#xff09;。 字符串 s 的子序列可以通过删去字符…

antd的表格组件错乱问题

环境 react&#xff1a;17.0.2 antd&#xff1a;3.26.20 问题 表格头列宽度和表格体列宽度不一致&#xff0c;表格错乱 解决 针对这个问题官方github仓库里面有专门的issues https://github.com/ant-design/ant-design/issues/13825 里面给出了几种解决方案&#xff1a…

C++类对象模型、类对象的存储方式、this指针、this指针的引出、this指针的特性、C语言和C++实现Stack的对比等的介绍。

文章目录 前言一、C类对象模型1. 类对象的存储方式2. 结构体内存对齐规则 二、this指针1. this指针的引出2. this指针的特性3. C语言和C实现Stack的对比 总结 前言 C类对象模型、类对象的存储方式、this指针、this指针的引出、this指针的特性、C语言和C实现Stack的对比等的介绍…

2024中国应急(消防)品牌巡展成都站成功召开!

汇聚品牌力量&#xff0c;共同相聚成都。6月14日&#xff0c;由中国安全产业协会指导&#xff0c;中国安全产业协会应急创新分会、应急救援产业网联合主办&#xff0c;四川省消防协会协办的“一切为了安全”2024年中国应急(消防)品牌巡展-成都站成功举办。该巡展旨在展示中国应…

VMware虚拟机linux无法使用ifconfig的解决方法

在有些linux系统中&#xff0c;输入ifconfig会报错&#xff0c;这是为什么呢&#xff1f; 如果出现 那是说明&#xff0c;你的linux内没有对应的命令。 具体可输入 ls /sbin 查看,发现其中确实没有ifconfig命令 这个解决很简单&#xff0c;在命令行输入 sudo apt-get inst…

Cesium源码解析六(3dtiles属性获取、建筑物距离计算、建筑物着色及其原理分析)

快速导航 Cesium源码解析一&#xff08;搭建开发环境&#xff09; Cesium源码解析二&#xff08;terrain文件的加载、解析与渲染全过程梳理&#xff09; Cesium源码解析三&#xff08;metadataAvailability的含义&#xff09; Cesium源码解析四&#xff08;metadata元数据拓展…