检测数组中重复项的两种常用方法:
1)首先排序,时间复杂度为O(n log n),空间复杂度为O(1)
2)散列集,时间复杂度O(n),空间复杂度O(n)
是否有第三种检测重复的方法?
请不要回答蛮力。
答案 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>