查找两个数组中所有重复项的算法

时间:2012-10-13 08:00:57

标签: algorithm

在两个数组中查找所有重复项的最佳算法是什么?

我能想到的是蛮力算法。

直接比较两个数组,一旦找到相同的数字,将其存储在辅助数组中。但时间复杂度为 O (n 2 )。

4 个答案:

答案 0 :(得分:6)

  • 将第一个数组的编号添加到哈希结构(哈希集)
  • 对于第二个数组中的每个数字,如果在hashset中,则添加到最终数组,如果不是忽略

那将是O(n + m)(数组的大小)。

答案 1 :(得分:3)

有一个O(n log n)算法。

Sort arr1 and arr2 using quick sort or merge sort

i = 0
j = 0
found = 0
while i < arr1.length and j < arr2.length:
      if (arr1[i] == arr2[j])
          found = found + 1
          i = i + 1
          j = j + 1
      else if (arr1[i] < arr2[j])
          i = i + 1
      else
          j = j + 1

答案 2 :(得分:2)

对数组进行排序,然后同时遍历两个数组,当当前元素小于另一个时,总是前进一个数组。复杂性:O(nlogn)

答案 3 :(得分:1)

您可以在O(n)时间内识别数组中的重复项。这种方法使用hashmap,heres伪代码:

// a and b are input arrays
HashMap h
for e in a:
    if h[e] == 0:
        h[e]++
for e in b:
    if h[e] != 0:
        h[e]++
for e in h:
    if e > 1:
        print "Duplicate" + e

Hashmap[Element]是语法糖,意思是:

使用键e获取元素,如果不存在,则使用初始化程序0

创建它