防止溢出
mid = left + (right - left) / 2
空循环
对于mid, r, l
都为int
类型的循环:mid = left + (right - left) / 2
中,若right - left < 2
则mid
始终等于left
,陷入死循环
解决办法:r
只可能为1,r=0
不存在二分查找问题,mid = l + (r - l + 1) / 2
,
区间边界更新
每次迭代的区间边界更新分为两种情况:
- 如果mid本身符合条件
- 目标解在左区间,则
r = mid
- 目标解在右区间,则
l = mid
- 目标解在左区间,则
- 如果mid本身不符合条件
- 目标解在左区间,则
r = mid - 1
- 目标解在右区间,则
l = mid + 1
- 目标解在左区间,则