Найти все повторяющиеся строки в массиве -- Использование поиска по хеш-таблице
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
- 2046 reads