一句话理解
二分查找在有序数组里每次看中间,丢掉一半。
为什么要学
O(log n) 查找。后面所有二分的底子。
讲解
维护左右边界,取 mid。注意死循环:更新成 mid 还是 mid±1。
数组必须有序(或满足单调性)。
例子
int l = 1, r = n, ans = -1;
while (l <= r) {
int mid = (l + r) / 2;
if (a[mid] == x) { ans = mid; break; }
if (a[mid] < x) l = mid + 1;
else r = mid - 1;
}
看中间,小了去右边,大了去左边。
常见错误
- 无序数组上二分。
- l=mid 且 r-l 始终为 1 时死循环。