を見つけるために、私は、バイナリ検索を練習だし、配列内の「魔法のインデックス」を見つけるために、それを実装しようとしたとき、私は壁に実行していますよ。魔法指数はA[i] == i
です。バイナリ検索マジックインデックス
私はJava using recursionにいくつかの実装を見つけましたが、再帰が高価であるため再帰的に行うことを避けようとしています(ここではバイナリ検索が適切かどうか確認したい)。
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());
}
問題は、アルゴリズムが誤って特定のテストの実行上の誤った側に配列をスライスすることです:
は、ここに私のコードです。
たとえば、[-10, -3, 0, 2, 4, 8]
は4
を返しますが、[-10, 1, 0, 2, 5, 8]
は4
を返します。
あなたは配列がソートされているとは言及していませんでした – MBo
@MBo彼の配列がソートされているかどうかをオペレータから確かめようとしているのかどうかはわかりませんが、そうでなければソートを仮定します。 – 0xc0de
@Jose、バイナリ検索はソートされた配列でのみ動作し、2番目の配列はソートされません。 0xc0de @ – 0xc0de