二分
二分的本质是二段性(注意:可二分的数组不一定要有序)
有序数组具备二段性,我们选择一个数可以将该有序数组分为两部分,一部分是满足条件的,另一部分是不满足条件的(比如:选择条件为小于等于)
整数二分
从左边开始查找
# 查找条件存在于左边界 比如 target <= nums[mid], 从左边开始查找
def l_bin_search(left: int, right: int):
while left < right:
mid = left + ((right - left) >> 1)
if check(mid):
right = mid
continue
left = mid + 1
return left从右边开始查找
# 查找条件存在于右边界 比如 target >= nums[mid], 从右边开始查找
def r_bin_search(left: int, right: int):
while left < right:
mid = left + ((right - left + 1) >> 1) # 注意此处需要进行+1操作否则有些case会陷入死循环
if check(mid):
left = mid
continue
right = mid - 1
return left练习
浮点数二分
利用浮点数二分求平方根
数的三次方根
最后更新于
这有帮助吗?