在两个数组中查找所有重复项的最佳算法是什么?
我能想到的是蛮力算法。
直接比较两个数组,一旦找到相同的数字,将其存储在辅助数组中。但时间复杂度为 O (n 2 )。
答案 0 :(得分:6)
那将是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
创建它