在采访中提到了这个问题:
建议并实现一个数据结构,该数据结构使用来自最终和连续整数范围的整数数据。数据结构应支持O(1)
插入和删除操作findOldest
(插入到数据结构中的最旧值)。
不允许重复(即如果某些值已经在里面 - 它不应该再次添加)
此外,如果需要,可以使用某些init进行初始化。
我提出了一个使用数组(大小为范围大小)为1/0的解决方案,表明该值在内部。它解决了插入/删除问题,需要O(range size)
初始化。
但我不知道如何使用给定的约束来实现findOldest
。
有什么想法吗?
P.S。不允许动态分配。
答案 0 :(得分:3)
如果我误解了你的问题,我道歉,但我得到的意思是
一种选择是构建一个长度为N的数组,其中每个条目都存储一个布尔“活动”标志以及一个指针。此外,每个条目都有一个双向链表单元格。直观地说,你正在构建一个带有链接列表的位向量,它通过它存储插入顺序。
最初,所有位都设置为false,指针全为NULL。插入时,将相应单元格上的位设置为true(如果已经设置,则立即返回),然后通过将新单元格附加到其上来更新双重链接的元素列表。这需要时间O(1)。要执行findOldest
步骤,只需查询指向最旧元素的指针即可。最后,要执行删除步骤,清除相关元素上的位并将其从双向链表中删除,必要时更新头尾指针。
总而言之,所有操作都需要时间O(1)并且不执行动态分配,因为链接列表单元格被预先分配为数组的一部分。
希望这有帮助!