题目
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
解题思路
二分查找寻找第一个值与索引不等的元素:
- 若中间元素与索引不等:[left,mid-1]
- 若中间元素与索引相等:[mid+1,right]
- 最后值与索引相等,说明索引加1为所求;否则索引减1为所求。
代码
class Solution:
def missingNumber(self, nums: List[int]) -> int:
#二区间二分查找
left, right = 0, len(nums)-1
while left<right:
mid = left + (right-left)//2
if nums[mid] != mid:
right = mid - 1
else:
left = mid + 1
return nums[left]+1 if nums[left]==left else nums[left]-1