二分查找的前提
- 目标函数单调, 必须是有序 递增/递减
- 存在上下界
- 可以通过索引访问
二分查找-代码模版
# 左右界标
left, right = 0, len(array) - 1
# 左右的两个界标 向中间夹逼
while left <= right:
mid = (left + right) / 2
if array[mid] == target:
# find the target!!
break or return result
elif array[mid] < target:
# 如果目标值 大于中间 那么就将左界标替换成右边的最小值
left = mid + 1
else:
# 如果目标值 小于中间 那么就将右界标替换成左边的最大值
right = mid - 1
注意: 如果mid是实数(整数、分数) 分数的情况 直接left = mid 或 right = mid