实现支持插入项目的数据类型,删除最近添加的项目,并删除随机项目。每个操作应该采用每个操作不变的预期摊销时间,并且应该使用与数据结构中的项目数成比例的空间(最多)。
例如。 1 2 3 4 5 6 - > 1 2 4 5 6
我已经实现了如下队列,但现在我不知道如何删除一个随机项目的摊销时间,我应该每次重新排列数组时,随机移除后移动数字随机移除后的第一号在阵列中向前插槽?这是一个非常糟糕的做法吗?或者我应该使用链表实现队列?但我的直觉告诉我链表也需要平均O(n)从链表头部到达随机节点。
FBSession
答案 0 :(得分:1)
此问题的关键在于,您不是从正在创建排除随机项的队列的队列中删除随机项。您应该在程序中有一个接受队列作为输入的函数,并执行以下操作: