二分查找是一种减而治之的思想方法,通过缩小区间范围来降低时间复杂度
二分查找有很多模板
# 开区间
def bSearch(arr,t):
l,r = -1,len(arr)
while l + 1 < r:
mid = (l + r) // 2
if arr[mid] < t:
l = mid
else:
r = mid
return r
# 闭区间
def bSearch(arr,t):
l,r = 0,len(arr)-1
while l <= r:
mid = (l + r) // 2
if arr[mid] < t:
l = mid + 1
else:
r = mid - 1
return l
# 左闭右开区间写法
def bSearch(arr,t):
left, right = 0, len(nums)
while left < right:
mid = (left + right) // 2
if nums[mid] < target:
left = mid + 1
else:
right = mid
return left