删除最旧的数据结构,打印最大

时间:2012-07-27 06:49:24

标签: algorithm data-structures

我正在练习这个问题进行面试。

最佳数据结构,将在最短时间内实现以下3个操作::

a.) insertion.
b.) removing the oldest element.
c.) printing the largest element.

我能想到的最好的是最小/最大堆或优先级队列。对于操作(a)和(c),Heap是有效的,但是,我不确定,第二个操作'删除最旧的元素'可以使用堆有效地完成。

所以建议一个理想的数据结构,它将有效地实现所有3个操作。

谢谢!

2 个答案:

答案 0 :(得分:3)

如何将某种最大堆用于操作 a,c 以及只是一个额外的节点队列,以历史顺序存储它们?如果您使用Fibonacci Heap,您将获得 O(1)时间来进行操作 a c ,以及 O (logN) b 的时间。你只需要在添加新元素时将新节点的指针推送到队列中,并在删除最旧的元素时删除队列前端指向的节点(当然从队列中弹出它)。

答案 1 :(得分:1)

我认为最老的意思是插入时间,而laregest元素是具有最高值的元素。也许你可以写成Tupels of(值,插入时间)

也许你可以在最大堆中插入所有元素的值,并在一分钟内听到插入时间并连接它们。在我的脑海里,有2个连接的堆,这些配对是教堂的代表。它不是很优雅但它应该有效。每次插入和删除后,您需要检查堆属性。