data-structures - 具有最大 api 的双端队列?

标签 data-structures

使用 max() API 实现队列,以便 push()pop()max() (摊销)O(1) 中的所有工作都是 known solved problem 。是否有已知的解决方案可以使用相同的 max() API 实现比 O(n) 更快的双端队列?能证明这是不可能的吗?

最佳答案

100% 可能有一个 dequeO(1) max api。

双端队列可以是 implemented from two stacks 。虽然需要一些额外的业务逻辑来保持双端队列平衡,但这个想法相当简单。想象一下面向相反方向的两个堆栈连接在一起。从这个结构中,您可以弹出并附加到两侧。

可以创建一个具有恒定时间 get_max()get_min() 的堆栈。每次插入堆栈时,都会插入两件事 - (value, current_max)。您可以通过将前一个元素中的 current_max 与当前 进行比较来计算恒定时间内的 current_maxget_max() 的结果将始终是堆栈顶部的 current_max

如果您从具有 get_max() api 的两个堆栈实现一个 deque,要获取双端队列的最大值,您只需调用 get_max( ) 对于两个堆栈并返回较大的值。

关于data-structures - 具有最大 api 的双端队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54609918/

相关文章:

java - B-Tree 如何在序列化方面工作?

java - 一种三维数据结构,用于保存项目之间的位置关系

Java 哈希表负载因子

c - 如何在C中使用两个堆栈实现队列

algorithm - 您如何知道在 AVL 树中的何处执行旋转?

javascript - 将列(对象的对象)转换为行(对象的数组)

algorithm - 查找第一个元素可被第二个元素整除的对数

r - 用给定的长度和内容初始化列表

c++ - 配对堆与 std::priority_queue

c# - 面向对象的嵌套字典数据结构