添加,删除和首次缺少正整数

时间:2016-02-04 15:20:46

标签: algorithm

给出一个空列表。有三种类型的查询1, 2, 3

查询1 x其中x是一个正整数,表示将数字x添加到列表中。

查询2 x表示从列表中删除x

查询3表示打印数组中不存在的最小正整数。

此处x可以从110^9,查询次数最多为10^5。对于大范围的x,我不能保留一个标记访问整数的布尔数组。我该怎么办?

1 个答案:

答案 0 :(得分:0)

关于您的数据有太多未知数,无法在此给出明确的答案。这种方法至少在这些不同的情况之间存在很大差异:

  1. 很少值。
  2. 很多价值观,但差距很大。
  3. 很多价值只有很小的差距。
  4. 几乎所有的价值观。
  5. 这还取决于您将最常做的哪些操作。

    小于1 GB的数据,因此可以在大多数计算机上将其保留为内存中的位数组。但是如果数据集稀疏(上面的情况1和2),您可能需要考虑稀疏数组,或者非常稀疏的集合(情况1),可能是二叉搜索树或最小堆。如果你要经常使用~~x == x操作,那么堆可能不是一个好主意。

    对于案例1,2和4,您可能会考虑range tree。此解决方案的优点是,您可以在对数时间内执行操作2,只需向左下方查看树,然后查看第一个范围。

    如果您不打算进行大量随机插入,也可以将数据结构分页到磁盘。

    您还可以考虑使用Bloom filter加快搜索速度,具体取决于您最终选择的数据结构类型。