我需要一个脚本来有效地搜索一维数组中的所有重复项。 我尝试了一种天真的方法:
for(var i=0, ii<arr.length-1; i<ii; i++)
for(var j=i+1, jj<arr.length; j<jj; j++)
if(arr[i] == arr[j])
// remove the duplicate
非常简单,但如果数组包含大量值,则需要很长时间。我使用的表通常包含数十万个值,因此此操作所需的迭代次数非常多!
如果有人有想法!?
答案 0 :(得分:2)
使用LinkedHashSet或OrderedHashSet实现,它不允许重复,并在插入,查找和删除时提供预期的O(1)。由于您的OP表示要删除重复项,因此没有比O(n)更快的方法。在1,000,000个项目的数组中,最长时间为16毫秒
复杂度预期为O(n),具有良好的散列函数。
答案 1 :(得分:0)
This代码可能是您可以做到的最有效的方式.. !!这只不过是set的直接实现。
function eliminateDuplicates(arr) {
var i,
len=arr.length,
out=[],
obj={};
for (i=0;i<len;i++) {
obj[arr[i]]=0;
}
for (i in obj) {
out.push(i);
}
return out;
}