【问题标题】:Data Structure for Removing the Oldest,printing largest删除最旧,打印最大的数据结构
【发布时间】:2012-07-27 06:49:24
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

  • 关于编程和一般数据结构的概念性问题也可以在programmers.stackexchange.com 上提问。
  • 删除最旧的元素是什么意思?这里的老是指什么?在某种意义上它也是一个最小/最大元素
  • @arunmoezhi 我认为他的意思是首先插入到数据结构中所有元素之间的元素。
  • 问题仍然不清楚。这些操作的频率是多少。
  • O(1) 中的所有内容:stackoverflow.com/questions/4802038/…

标签: algorithm data-structures


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为最旧的他是指插入时间,而最大的元素是具有最高价值的元素。也许你可以把它写成 (value,insertiontimes) 的元组

    也许您可以在最大堆中插入所有元素以获取值,并在几分钟内听到插入时间并连接它们。在我看来,有 2 个堆是连接的,而这些对是元组的表示。它不是很优雅,但它应该可以工作。每次插入和删除后,您需要检查堆属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多