#binary-search
Вопрос:
Я попытался написать двоичный код поиска, используя цикл while, но я что-то пропустил, потому что он работает не для всех входных данных.
function solution(A, X) {
var N = A.length;
if (N === 0) {
return -1;
}
var l = 0;
var r = N-1;
while (l < r) {
var m = Math.floor((l r) / 2);
if (A[m] > X) {
r = m - 1;
} else {
l = m;
}
}
if (A[l] == X) {
return l;
}
return -1;
}
что я пропустил?
Ответ №1:
Вы допустили ошибки в трех пунктах:
- В то время как цикл: Это должно быть
while (l <= r)
- Другое условие, когда X > A[m]:
l = m 1;
- Нахождение элемента. В двоичном поиске мы проверяем элемент, присутствующий в середине, где, как вы проверяете, находится[l]. Это должно быть
if (A[m] == X){ return m; }
А также вы написали N===0. Возможно, вы допустили синтаксическую ошибку.