首页 > 其他分享 >单调队列

单调队列

时间:2023-05-30 15:12:02浏览次数:31  
标签:队列 元素 进队 --- 出队 进入 单调

以求滑动窗口内最小值为例:
2 3 1 4 7 8 5 一组数据,有一个范围为 3 的的滑动窗口,每次向右移动 1 距离,求每次滑动的最小值

队列特性

  • 维护一个最大为 3 个数的队列,且该队列具有单调性(队列内的数据呈现单调递增或递减)
  • 元素进队只能从队尾进,队头,队尾都可出
  • 从尾进队:是必进队;新元素进队前会先循环判断是否比队尾元素更有优势(这个列子里就是更小),如果更优,会将队尾元素出队,再次循环直至队列为空或者不是更优,再进队
  • 从头出队条件:窗口滑动了,头元素下标超过尾元素下标差值大等于了窗口范围(head+3<=tail)
  • 从尾出队条件:新元素比尾更有优势

过程:

第一个元素进入 2

[2] ---进之前队列为空,直接进入

第二个元素进入 3

[2,3] ---队列不为空,且不是更优,头下标没有超出范围,直接进入

第三个元素进入 1

[2,3] 1->[2] 1->[1] ---循环判断到队列为空,再进入

第四个元素进入 4

[1,4]

第五个元素进入 7

[1,4,7]

第六个元素进入 8

[1,4,7]->[4,7,8] ---头洗标超出范围,头元素出队,再进队

第七个元素进入 5

[4,5] ---循环判断至不是更优,再进入

标签:队列,元素,进队,---,出队,进入,单调
From: https://www.cnblogs.com/ccljj/p/17443208.html

相关文章

  • 实现延迟队列
    原理:利用消息过期后消息进入死信,然后消费者订阅死信队列进行消费达到延迟的功能 生产者-->交换机01-->过期队列-->消息过期后-->死信交换机-->死行队列-->消费者 定义配置@ConfigurationpublicclassTTLQueueConfig{//region声明普通类型的交换机和队列pu......
  • hdu 1506(dp || 单调栈)
    题意:这题是要找最大的矩形面积。解题思路:这题的关键是要找每个条形能够往左和往右能够到达的最大长度。我最开始的思路是单调栈去维护,只要入栈的元素比栈顶元素小,栈顶就要出栈,并且知道其最右能够到达的最远距离。当要入栈的元素已经找到了位置,那么它左边的元素所在的位置就是其能到......
  • poj 2010(优先队列)
    题意:奶牛大学:奶大招生,从C头奶牛中招收N头。它们分别得分score_i,需要资助学费aid_i。希望新生所需资助不超过F,同时得分中位数最高。求此中位数。解题思路:这里要求最大中位数,中位数肯定是在这些人中间,故可以枚举中位数,可以先对分数进行排序,然后用二分去找最大中位数。每次枚举的中位......
  • 数据结构之环形队列
    @TOC一.环形队列的定义及其特点循环队列是一种线性数据结构,其操作依然是先进先出原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。特点:对于一个普通队列来说,每出队一次,头指针就必须往后移一位,这样使用过的空间就无法再重复使用,(头指针无法回移),即使队列元素......
  • hdu 5102(队列+节点扩展)
    TheK-thDistanceTimeLimit:8000/4000MS(Java/Others)    MemoryLimit:65536/65536K(Java/Others)ProblemDescriptionGivenatree,whichhasnnodeintotal.Definethedistancebetweentwonodeuandvisthenumberofedgeontheirunique......
  • 关于消息队列的一些思考
    日志与消费队列消息队列的应用价值数据集成于系统解耦异步处理与事件驱动流量削峰事务消息与分布式事务的最终一致从历史看消息队列的价值演化思考手上的工作,找到他的价值和定位,将价值最大化1.日志和消息队列推荐文章:TheLog:Whateverysoftwareengineershou......
  • Disruptor内存消息队列简单使用
    Disruptor内存消息队列最近在做一个有关使用内存消息队列到功能,比如将日志信息或点击统计信息持久化等操作,开始想着用java到内存队列作为缓冲区,后来在网上搜到Disruptor这个东西,神乎其神到,就简单了解了一下,做了一个demo,感觉还不错,可以用用,有关概念可以自行搜索,下面就简单介绍一下开......
  • 数据结构之队列
    @TOC前言本文章讲述的是数据结构的特殊线性表——队列一.什么是队列,队列的特点队列是数据结构中的一种特殊的线性表,它与栈不同,队列的基本图例如上图:显然,队列的特点就是:先进先出FirstInFirstOut那么我们使用什么样的方式来实现队列呢?基于队列的特点,使用链表而不是数组来实现队......
  • 代码随想录Day11|栈和队列
    20.有效的括号经典的利用栈的题目这里选择用java来写,注意我们的java中的泛型不能用基本数据类型,而是应该使用包装类注意!java一定是定义后需要声明,然后才能使用1047.删除字符串中的所有相邻重复项 略比较简单150.逆波兰表达式求值注意:leetcode内置jdk的问题,不能使......
  • 优先级队列的实现详解( Java 实现)
    前言优先级队列是在队列的基础上,每个元素都带有一个优先级,可以实现按照优先级高低进行存储和访问。Java提供了许多实现优先级队列的方法,例如使用堆来实现。在本篇博客中,我将介绍Java实现优先级队列实现的具体方法,以及如何使用它来解决实际问题。一、优先级队列的概念优先级队列......