【发布时间】:2015-06-22 20:56:16
【问题描述】:
对于支持 Enque、Dequeue、Peak、Min 和 Max 操作并在 O(1) 时间内执行所有这些操作的队列来说,正确的数据结构是什么。
最明显的数据结构是链表,但 Min, Max 操作是 O(n)。 Priority Queue 是另一个完美的选择,但 Enqueue、Dequeue 应该以队列的正常方式工作。 (先进先出)
想到的另一个选项是堆,但我不太清楚如何使用堆设计具有最小、最大操作的队列。
非常感谢任何帮助。
【问题讨论】:
-
我不确定是否存在这样的数据结构。您可能想混合使用队列和特里树(或某种平衡树),但有些操作需要 O(log(n))
-
另外,programmers 可能是一个更好的提问地点。
-
可以设计一个满足所有这些要求的堆栈。通过存储最多每个元素的 Min 和 Max 值,我们可以在 O(1) 时间内找到 Min 和 Max,但使用队列会更棘手。我认为应该有办法,因为我知道有人已经实现了这一点。但我不知道怎么做。
-
不,如果你弹出 Min 或 Max 值,你的 Stack 不是 O(1)
-
问题并不完全清楚:是否 min() 和 max() 从结构中删除元素,或者它们是只读的?如果是只读的,那么 O(1) stack-with-min-max 肯定是可能的(但是,不是队列)。如果不是只读的,那么@BasileStarynkevitch 是正确的,这样的结构将无法按预期工作。