在两个数组中查找所有重复项的最佳算法是什么?
我能想到的是蛮力算法。
直接比较两个数组,一旦找到相同的数字,将其存储在辅助数组中。但时间复杂度为O (n 2 )。
那将是 O(n+m) (数组的大小)。
有一个 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
对数组进行排序,然后同时遍历两个数组,当当前元素小于另一个时,总是推进一个数组。复杂度:O(nlogn)
您可以在 O(n) 时间内识别数组中的重复项。这种方法使用hashmap,这里是伪代码:
// 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 创建它