arrays - 通过不使用集合来删除具有 O(N) 的重复数组元素?

标签 arrays algorithm duplicates

<分区>

假设我有一个整数元素数组,在这里我想删除所有重复元素并打印剩余元素而不使用任何 Java.util 类。我使用 2 个指针来扫描并删除所有重复项来解决它,但这需要 O(N^2)。我只想知道有没有算法可以在 O(N) 内完成这个任务?

例子:

Input Array:    [1, 2, 3, 4, 5, 4, 3, 4, 6]
Expected Array: [1, 2, 5, 6]

最佳答案

您可以使用桶来实现 O(N) + C(使用巨大的 C),但以存储为代价

  1. 创建一个 MAX_INT 大小的整数数组,称为 bucket[MAX_INT]
  2. 遍历输入数组。如果值为x,增加bucket[x]++;
  3. 再次遍历输入数组。对于每个 x 如果 bucket[x] == 1,添加到预期的数组中。

bucket[]数组可以用更好的数据结构代替。但是还是做到了O(N)

关于arrays - 通过不使用集合来删除具有 O(N) 的重复数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762790/

相关文章:

c# - 在 C# 中获取 List<List<int>> 的所有组合(也包含部分结果)

php:检查数组是否有重复项

ios - Swift 2D 数组扩展

javascript - 将对象属性转换为自己的对象可能吗?

c++ - 指向指针数组的指针(动态分配)

javascript - 可能的组合并转换为字母算法 - Javascript(Facebook 询问)

Javascript 数组过滤器执行函数

algorithm - HermiteH函数用什么算法实现(mathematica)

python - 使用 pandas 和 Python 删除重复项

Java序列化和重复对象