Code, Math and Fun
Задачка от protiv:
Eсть массив чисел, где все числа кроме одного повторяется тотчно два раза. Задача найти эти число за линейное время.
Eсть массив чисел, где все числа кроме одного повторяется тотчно два раза. Задача найти эти число за линейное время.
Tак работает, но время не линейное, а квадричное:
Knobelaufgabe für Informatiker: es gibt einen Zahlenfeld mit n Zahlen. Alle Zahlen bis auf eine sind in diesem Feld doppelt vorhanden. Es soll ein Algorithmus geschrieben werden, der die einzeln vorhanden Zahl in der linearen Zeit findet. Die Lösung gleich unten ist nicht richtig, auch wenn es funktioniert (php):
$arrZ =array (4,2,1,1,3,2,3);
$found = false;
for ($i = 0; $i<=count($arrZ)-1; $i++) {
for ($j = 0; $j<=count($arrZ)-1; $j++) {
$isDouble = false;
if ($j != $i && $arrZ[$j] == $arrZ[$i]){
$isDouble = true;
break;
}
if ($j == count($arrZ)-1 && $isDouble == false){
echo "SINGLE: $arrZ[$i]";
$found = true;
}
}
if ($found == true) break;
}
А так правильно:
Das ist die richtige Lösung, den hier wird die gesuchte Zahl mit nur einer Schleife gefunden:
$arrZ =array (4,2,1,1,3,2,3);
$r = 0; for ($i = 0; $i<=count($arrZ)-1; $i++) {
$r = $r^$arrZ[$i];
}
echo $r;











