我正在練習二進制搜索,當我嘗試實現它來查找數組中的「魔術索引」時,我正在碰壁。神奇指數是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我不確定您是否試圖從OP中確認他的數組是否已排序,但是如果沒有,則二分查找假設排序,不是嗎? – 0xc0de
@Jose,二進制搜索僅適用於已排序的數組,第二個數組未進行排序。 – 0xc0de