Найти все повторяющиеся строки в массиве -- Использование поиска по хеш-таблице
Primary tabs
Неоптимальное (сложность алгоритма nxn по числу сравнений):
function getDuplicated($strings) { $dublicated = []; foreach($strings as $candidate) { if (!in_array($candidate, $dublicated)) { $count = 0; foreach($strings as $str) { if ($candidate == $str) { $count++; if ($count == 2) { $dublicated[] = $candidate; break; } } } } } return $dublicated; }
Более оптимальное решение (линейная сложность):
function getDuplicated($strings) { $uniqueElements = []; $dublicated = []; foreach($strings as $candidate) { if (array_key_exists($uniqueElements, $candidate)) { $dublicated[] = $candidate; } else { $uniqueElements[$candidate] = 1; } } return $dublicated; }
-- в данном случае используется поиск по хэш-таблице (так как ассоциатисные массивы реализованы с использование хэш-таблиц).
- Log in to post comments
- 1641 reads