An O(M log N)
решение
Пусть длина arr1
будет O(M)
, а длина arr2
будет O(N)
. Алгоритм сортировки / двоичного поиска: O(M log N)
.
Псевдокод выглядит следующим образом:
SORT(arr2) # N log N
FOR EACH element x OF arr1 # M
IF binarySearch(x, arr2) is FOUND # log N
DECLARE DUP x
O(M log N)
значительно лучше, чем O(MN)
.
Линейно-временное решение
Существует также третий способ, который является O(M+N)
, с использованием набора, который имеет вставку и тест O(1)
. Набор на основе хеша соответствует этому ожиданию.
Псевдокод выглядит следующим образом:
INIT arr1set AS emptySet
FOR EACH element x OF arr1 # M
INSERT x INTO arr1set # 1
FOR EACH element x OF arr2 # N
IF arr1set CONTAINS x # 1
DECLARE DUP x