Ich übe binäre Suche und ich renne in eine Wand, wenn ich versuche, es zu implementieren, um den "magischen Index" in einem Array zu finden. Der magische Index ist A[i] == i
.Binäre Suche nach Magic Index
Ich habe einige Implementierungen in Java using recursion gefunden, aber ich versuche, dies rekursiv zu vermeiden, weil Rekursion teuer ist (und ich möchte sehen, ob die binäre Suche hier geeignet ist).
Hier ist mein Code:
function magicIndex(arr) {
var result = arr, mid;
while (result.length > 1) {
mid = Math.floor(result.length/2);
if (result[mid] === mid) {
return arr.indexOf(result[mid]);
} else if (mid > result[mid]) {
result = result.slice(mid+1, result.length);
} else {
result = result.slice(0, mid);
}
}
return arr.indexOf(result.pop());
}
Das Problem ist, dass der Algorithmus falsch das Array an der falschen Seite auf bestimmte Testläufe Scheiben schneiden.
Zum Beispiel gibt [-10, -3, 0, 2, 4, 8]
4
zurück, aber [-10, 1, 0, 2, 5, 8]
gibt auch 4
zurück.
Sie haben nicht erwähnt, dass das Array sortiert ist – MBo
@MBo Ich bin mir nicht sicher, ob Sie versuchen, vom OP zu bestätigen, ob sein Array sortiert ist, aber wenn nicht, nimmt die binäre Suche eine Sortierung an, nicht wahr? – 0xc0de
@Jose, die binäre Suche funktioniert nur in einem sortierten Array, das zweite Array ist nicht sortiert. – 0xc0de