防止溢出
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
- 目标解在左区间,则