Skip to content

Instantly share code, notes, and snippets.

@Nalofree
Created July 6, 2021 13:54
Show Gist options
  • Save Nalofree/571f476ad8bf438b77c9b0159bf9e651 to your computer and use it in GitHub Desktop.
Save Nalofree/571f476ad8bf438b77c9b0159bf9e651 to your computer and use it in GitHub Desktop.
Ищем дубликаты в массиве.
<?php
$n = 6;
$a = [1, 2, 3, 3, 5, 5, 4]; //n+1 элементов от 1 до n
// Самый очевидный способ - перебор
function getDublicate($a, $n) {
$dublicate = -1;
for ($i = 0; $i < $n+1; $i++) {
for ($j = $i+1; $j < $n+1; $j++){
if($a[$i] === $a[$j]) $dublicate = $a[$i]; // Тут, очевидно, будет последний попавшийся дублкат. Но нам подходит любой.
}
}
return $dublicate;
}
$result = getDublicate($a, $n);
echo $result;
echo PHP_EOL;
// Сортировать массивы нам функциями массивов нельзя, сортировать его самостоятельно циклами так себе идея,
// а числа у нас от 1 до n, то будем помечать.
// Метить элеенты будем минусами.
function getDublicateTwo($a, $n) {
$dublicate = -1;
for ($i = 0; $i < $n+1; $i++) {
if($a[$i] < 0) { // Если элемент уже со знаком минус (отрицательный), то мы уже ходили к этому элементу, а значит индекс это дубликат.
$dublicate = $a[$i];
return abs($dublicate); // Будем брать абсолютное значение, а вдруг оно уже помечено.
}
$a[$a[$i]] = $a[$a[$i]] * -1; // Маркируем собственно
}
return $dublicate;
}
$result_two = getDublicateTwo($a, $n);
echo $result_two;
echo PHP_EOL;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment