leetcode总结-单调队列题型总结

单调队列是在单调栈上的拓展,单调队列中元素单调。注意与优先级队列进行区分。

单调队列的性质:

  • 寻找最大最小值时间复杂度小于 O(n),但大于 O(1),可以起到优化时间复杂度的作用
  • 单调队列初始时没有元素需要添加元素,以后每次变动队列不可能存在空的情况,只有在初始时添加第一个元素时候为空
  • 单调队列首尾变动,中间元素不变动
  • 单调队列第一个值必定是原序列中的最值,最后一个值不一定是原序列中的最值

题型

一个序列只有头尾的数据有变动,需要求该序列的最大值或最小值,可以尝试使用单调队列

时间复杂度是小于 O(n) 的,因此可以用来优化程序

常见题型:划窗类型题

关键字

头尾变动, 求最大或最小

解题步骤

注意观察题型满足首位元素变动,求最大或最小,希望优化时间小于 O(n) 的题目,我们就可以尝试使用单调队列去解决。

单调队列每次最值都在最左边,因此维护单调队列的时间复杂度小于 O(n) 线性,但也绝不是 O(1),找到最值的时间复杂度为 O(1),因为单调队列的第一个元素就是最值

  • 1.队首(左边)判定元素是否出队

    由于单调队列左边必定是最大值(最小值),根据题目要求判定单调队列左边是否要出队

  • 2.队尾(右边)通过循环不断删除结点

    右边通过一个 while 循环不断删除队尾元素,来保证较大(较小)的元素成功在右边入队,以此来维护单调队列

  • 3.最右边新元素入队

    当最右边元素入队之后,就成功维护一个新的单调队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值