二分查找法适合有序的线性表,基本代码如下:
def binary_search(nums,value):
low = 0
high = len(nums)-1
while low<=high:
mid = (low+high)//2
if nums[mid]<value:
low=mid+1
elif nums[mid]>value:
high=mid-1
else:
return mid
return -1
有个进阶的二分查找法,根据以下题目拓展:
给定有序列表a=[1,5,7,9,10],定义漏掉的列表b=[2,3,4,6,8],求漏掉的数组的第K个数。
def kth_missing_num(nums,k):
low,high=0,len(nums)-1
while low+1<high:
mid=(low+high)//2
missed_num=(nums[mid]-nums[low]+1)-(mid-low+1) #共有missed_num个漏掉的数
if missed_num>=k:
high=mid
else:
low = mid
k-=missed_num
if nums[low]+k>=nums[high]:
return -1
else:
return nums[low]+k