美文网首页
单调双端队列

单调双端队列

作者: madao756 | 来源:发表于2020-03-07 13:32 被阅读0次

0X00 模板题目

面试题59 - II. 队列的最大值 LCOF

维护一个单调递减(不是严格的是可以等的)的双端队列,双端队列的第一个值是当前队列的最大值

from collections import deque
class MaxQueue:

    def __init__(self):
        self.queue = deque()
        self.helper = deque()

    def max_value(self) -> int:
        if self.helper:
            return self.helper[0]
        return -1

    def push_back(self, value: int) -> None:
        # 维护一个单调递减的队列
        while self.helper and self.helper[-1] < value:
            self.helper.pop()
        self.helper.append(value)
        self.queue.appendleft(value)
        
    def pop_front(self) -> int:
        if not self.queue: return -1
        ans = self.queue.pop()
        if ans == self.helper[0]:
            self.helper.popleft()
        return ans

0X01 注意事项

什么时候使用「单调双端队列」

维护一个队列的最大值,最小值,此时为了保证 O(1) 的时间拿到 最大最小值可以使用 「单调双端队列」

0X02 相关题目

相关文章

  • 单调双端队列

    0X00 模板题目 面试题59 - II. 队列的最大值 LCOF 维护一个单调递减(不是严格的是可以等的)的双端...

  • 7.双端队列Deque

    目录:1.双端队列的定义2.双端队列的图解3.双端队列定义操作4.双端队列的实现 1.双端队列的定义 2.双端队列...

  • 双端队列

    双端队列 双端队列是与队列类似的项的有序集合。双端队列有两个端部,首部和尾部,并且项在集合中保持不变。双端队不同的...

  • 数据结构-队列(Queue)-FIFO

    数据结构-队列(Queue)-FIFO 队列的接口设计 双端队列-Deque 循环队列-CircleQueue 双...

  • 数据结构与算法之队列(五)

    目录 队列简介队列的接口设计用栈实现队列双端队列实现循环队列实现循环双端队列 一 简介 队列是一种特殊的线性表,只...

  • 队列 - 双端队列 - 循环队列 - 循环双端队列

    队列是一种特殊的线性表,只能在头尾两端进行操作队尾(rear):只能从队尾添加元素,一般叫做 enQueue,入队...

  • 数据结构之「双端队列」

    什么是双端队列? 双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double...

  • 数据结构(四) -- 双端队列

    一,双端队列 队列的一种变型--双端队列(Double-ended queue),简称为Deque。顾名思义,也就...

  • ARTS第八周20200712

    Algorithm 设计循环双端队列 设计实现双端队列。 你的实现需要支持以下操作:MyCircularDeque...

  • java基础之队列

    双端队列Deque 双端队列, 先看下整体结构 如图, 主要是addFirst 和 addLast方法, 有很多类...

网友评论

      本文标题:单调双端队列

      本文链接:https://www.haomeiwen.com/subject/iuqcdhtx.html