关于单调队列的个人理解

一、何为单调队列?

    1、首先搞懂,什么是队列

       队列是一种数据结构,两个端口,一个端口进元素,一个端口出元素,那么,根据这种操作的定义,不难发现:队列具有“先进先出”的性质

    2、单调队列

       单调队列,顾名思义,具有的单调性的队列,即队列中的元素按照某种特征有一定的顺序。比如单调递增的队列,单调递减的队列。

    3、举个例子:单调递增的队列:

       queue:{ 1 2 3 4 5 6 7 10 12 23 45 56 67 90 } 这就是一个单调递增的队列

    4、与普通队列的不同:

       它是一种双向队列:能够在队首和队尾删除元素,但是只能够在队尾插入元素,每次插入的时候,要是想节省时间的话,先和队首元素比较,比如要维护的是单调递增的队列,那么,当插入的元素大于队首的时候,直接将整个队列的所有元素删除,将这个数加进去。再和队尾元素比较,要是这个数小于队尾元素,直接加进队列中,要是比队尾大,那么就一次删除队尾元素,直到队尾元素大于该数。

       当然,很多时候不是维护的严格的单调递增或者严格的单调递减队列,那么这时候,在插入的时候稍稍改改判断条件就行了。

二、单调队列能用来干嘛?

    1、数据结构之一,做数据结构题目,就像 POJ 2823 一样,典型的单调队列题

    2、用于优化动态规划,这是很常见的动态规划优化方法

    3、还有其他的,本弱逼暂时没遇到这种题目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的单调队列是一种用于解决某些特定问题的数据结构。它是队列的一种变体,可以快速查询当前队列中的最大或最小元素。 单调队列通常用于需要维护当前滑动窗口中的最大或最小值的情况。例如,假设我们有一个长度为n的数组arr和一个窗口大小为k的滑动窗口。我们想要找到每个窗口中的最大值。单调队列就可以帮助我们在O(n)的时间复杂度内实现。 实现单调队列需要两个操作:push(x)和pop()。push(x)用于向队列的尾部添加元素x,而pop()用于从队列的头部删除元素。这两个操作具有O(1)的时间复杂度。 当我们向队列中添加一个新元素时,为了维护队列单调性,我们需要从队列的尾部删除一些元素。具体来说,我们从队列的尾部开始,不断地删除比新元素小的元素,直到队列为空或者新元素大于等于队列尾部元素为止。这样,我们就可以保证队列中的元素是以递减顺序排列的。 当我们需要查询当前队列中的最大或最小值时,只需访问队列头部的元素即可。由于队列中的元素是以递减的顺序排列的,所以头部元素就是最大值(或最小值)。 总的来说,Python的单调队列是一种高效的数据结构,可以用于解决一些特定问题,如滑动窗口中的最大(或最小)值。它具有O(n)的时间复杂度,并且可以通过push(x)和pop()操作来维护队列单调性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值