找到重复的第三种方法

时间:2011-05-10 09:16:40

标签: algorithm duplicates

检测数组中重复项的两种常用方法:

1)首先排序,时间复杂度为O(n log n),空间复杂度为O(1)

2)散列集,时间复杂度O(n),空间复杂度O(n)

是否有第三种检测重复的方法?

请不要回答蛮力。

3 个答案:

答案 0 :(得分:5)

另一种选择是Bloom filter。复杂性O(n),空间变化(几乎总是小于散列),但有可能出现误报。数据集的大小,过滤器的大小和您可以预期的误报数量之间存在复杂的关系。

在进行更昂贵的重复检查之前,Bloom过滤器通常用作快速“健全性检查”。

答案 1 :(得分:4)

取决于信息。

如果您知道数字的范围,例如1-1000,则可以使用位数组。

让我们说范围 a ... b

用(b-a)位创建一个位数组。将它们初始化为0。

循环遍历数组,当你到达数字x时,将位x-a改为1。

如果已经存在1,则表示您有重复。

时间复杂度: O(n)

空间复杂度:(b-a)位

答案 2 :(得分:1)

另一种查找重复项的方法是,n元素数组包含从0到n-1的元素。 < Find Duplicates>