题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
def get_missing_num(nums):
if len(nums)<1:
return -1
begin,end = 0,len(nums)-1
while begin<end:
mid = (begin+end)//2
if nums[mid] == mid:
begin = mid
else:
end = mid
if begin+1==end:
break
if nums[begin]+1==nums[end]:
return 0
else:
return nums[begin]+1
注:使用二分查找的方式,如果中间的数与索引相同,说明缺失的数字在右边,让begin指向这个位置;如果中间的数与索引不相同,说明缺失的数字在左边,让end指向这个位置。最终找到begin和end相邻的两个数。如果这两个数也相差1,说明缺失的数位第一个数0,否则,缺失的数为这两个数的中间的数字。