高效的重复搜索算法

时间:2014-02-14 10:52:30

标签: javascript algorithm

我需要一个脚本来有效地搜索一维数组中的所有重复项。 我尝试了一种天真的方法:

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

非常简单,但如果数组包含大量值,则需要很长时间。我使用的表通常包含数十万个值,因此此操作所需的迭代次数非常多!

如果有人有想法!?

2 个答案:

答案 0 :(得分:2)

使用LinkedHashSet或OrderedHashSet实现,它不允许重复,并在插入,查找和删除时提供预期的O(1)。由于您的OP表示要删除重复项,因此没有比O(n)更快的方法。在1,000,000个项目的数组中,最长时间为16毫秒

  • 创建一个LinkedHashSet hs
  • arr中的foreach object obj - hs.add(obj);

复杂度预期为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;
}