algorithm - 打印队列的任何旧版本

标签 algorithm

<分区>

我遇到了这个问题,想问问实现这个目标的最佳方法是什么。

给定一个 FIFO 队列。您可以假设队列包含整数。每次发生插入或删除时,都会创建一个新版本的队列。在任何时候,您都必须以最小的时间和空间复杂度打印(队列的全部内容)队列的任何旧版本。

最佳答案

这是假设您指的是 FIFO 队列而不是其他类型的队列,例如优先级队列。

将其存储在一个数组中,并保留两个指针变量,一个指向其头部,另一个指向其尾部。

例如:

insert 3 2 5 9 - version 1
q = [3 2 5 9]
     ^     ^
delete, delete - version 2
q = [3 2 5 9]
         ^ ^
insert 6 3 4 - version 3
q = [3 2 5 9 6 3 4]
         ^       ^

要打印一个版本,您只需要为每个版本存储两个值:指针所在的位置。在该版本中,打印与队列大小成线性关系。

向量可以变大,但如果您希望能够打印任何版本,则必须存储其中曾经存在的每个元素。

如果您认为这是一个问题,您也可以使用链表来避免调整数组大小。删除时确保不要从内存中删除节点。

关于algorithm - 打印队列的任何旧版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18293084/

相关文章:

algorithm - 选择覆盖最多单词的字母表?

algorithm - HeapSort - 在交换之前排序

algorithm - 排序算法如何具有 O(1) 的空间复杂度?

java - java中的递归质因数算法

algorithm - 图形中是否有类似于mipmaps的数据存储模式?

c# - 从包含 m 个项目的集合 S 中选择到长度为 N (N>m) 的另一个列表中的排列

algorithm - 从 4 或 5 个范围未知的均匀分布随机数中进行最佳选择

algorithm - Haskell 算法找到所有可能的 Beta 约简

algorithm - 超时随机算法

algorithm - 在面板上放置随机的非重叠矩形