数据结构支持O(1)remove / insert / findOldest?

时间:2013-11-05 21:19:05

标签: algorithm data-structures

在采访中提到了这个问题:

建议并实现一个数据结构,该数据结构使用来自最终和连续整数范围的整数数据。数据结构应支持O(1)插入和删除操作findOldest(插入到数据结构中的最旧值)。

不允许重复(即如果某些值已经在里面 - 它不应该再次添加)

此外,如果需要,可以使用某些init进行初始化。

我提出了一个使用数组(大小为范围大小)为1/0的解决方案,表明该值在内部。它解决了插入/删除问题,需要O(range size)初始化。

但我不知道如何使用给定的约束来实现findOldest

有什么想法吗?

P.S。不允许动态分配。

1 个答案:

答案 0 :(得分:3)

如果我误解了你的问题,我道歉,但我得到的意思是

  • 您正在考虑固定的值范围(例如,[0,N))
  • 您需要支持插入和删除而不重复。
  • 您需要支持findOldest。

一种选择是构建一个长度为N的数组,其中每个条目都存储一个布尔“活动”标志以及一个指针。此外,每个条目都有一个双向链表单元格。直观地说,你正在构建一个带有链接列表的位向量,它通过它存储插入顺序。

最初,所有位都设置为false,指针全为NULL。插入时,将相应单元格上的位设置为true(如果已经设置,则立即返回),然后通过将新单元格附加到其上来更新双重链接的元素列表。这需要时间O(1)。要执行findOldest步骤,只需查询指向最旧元素的指针即可。最后,要执行删除步骤,清除相关元素上的位并将其从双向链表中删除,必要时更新头尾指针。

总而言之,所有操作都需要时间O(1)并且不执行动态分配,因为链接列表单元格被预先分配为数组的一部分。

希望这有帮助!