二分查找的注意事项:
- 初始值:
left=0
,right=len(nums)
- 循环条件:
left < right
; - 中间位置计算:
mid=left+((right-left)>>1)
;- 避免
left+right
出现溢出;
- 避免
- 边界更新条件:
- 搜索目标:
left=mid+1
right=mid-1
- 搜索左边界:
left=mid+1
right=mid
- 右边界更新更保守
- 搜索右边界:
left=mid
right=mid-1
- 和搜索左边界互为镜像
- 搜索目标:
- 退出循环条件:
- 搜索目标:
nums[mid]==target
; - 搜索左边界:
l>=r
- 搜索右边界:
l>=r
- 搜索目标:
- 返回值(搜索不到返回
-1
):- 搜索目标:
mid
或-1
。 - 搜索左边界:
left
或-1
。 - 搜索右边界:
right
或-1
。
- 搜索目标: