Задачка на логику

Andreii19

Новичок
есть список чисел, целых. длинный. все числа, кроме одного, встречаются в списке дважды. найти это единственное число.
PHP:
$arr=array(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8);
$arr1=array();
for($i=0;$i<count($arr);$i++){
    for($j=0;$j<count($arr);$j++){
        if($j==$i)$arr1[$j]='unik';
        else $arr1[$j]=$arr[$j];
    }
    if(!in_array($arr[$i],$arr1))echo ' это число = '.$arr[$i];
}
Нашел этот код, но не понимаю эту часть
PHP:
if($j==$i)$arr1[$j]='unik';
        else $arr1[$j]=$arr[$j];
    }
    if(!in_array($arr[$i],$arr1))echo ' это число = '.$arr[$i];
Если не трудно не могли бы мне объяснить эту часть кода. Хочу понять,но не получается.
Или подскажите другой пример пожалуйста.
 
Последнее редактирование:

HraKK

Мудак
Команда форума
Это моя задача на собеседование:) Пожалуйста, кто знает не пишите ответа.

Только в условии еще должно быть что нельзя выделять новой памяти и проход должен быть ЛИШЬ 1.

UPD. а уже запилили ответ :(
 

valdislav

Новичок
есть список чисел, целых. длинный. все числа, кроме одного, встречаются в списке дважды. найти это единственное число.
PHP:
$arr=array(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8);
$arr1=array();
for($i=0;$i<count($arr);$i++){
    for($j=0;$j<count($arr);$j++){
        if($j==$i)$arr1[$j]='unik';
        else $arr1[$j]=$arr[$j];
    }
    if(!in_array($arr[$i],$arr1))echo ' это число = '.$arr[$i];
}
Нашел этот код, но не понимаю эту часть
PHP:
if($j==$i)$arr1[$j]='unik';
        else $arr1[$j]=$arr[$j];
    }
    if(!in_array($arr[$i],$arr1))echo ' это число = '.$arr[$i];
Если не трудно не могли бы мне объяснить эту часть кода. Хочу понять,но не получается.
Или подскажите другой пример пожалуйста.
поставь 8 в середину и код перестанет находить дубли. Это неправильное решение.
 

Absinthe

жожо
Ну раз уже ответ запилили, то вот классическое решение:
PHP:
$arr = array(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8);
echo array_reduce($arr, function($x, $v) { return $x ^= $v; });
 

fixxxer

К.О.
Партнер клуба

Absinthe

жожо
Придираешься.
PHP:
$arr = array(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8);
for ($c = count($arr), $i = 1; $i < $c; $i++) {
    $arr[0] ^= $arr[$i];
}
echo $arr[0];
 
Сверху