题目:
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
样例
输入:[0,1,2,4]
输出:3
解答:
二分查找,O(logn),循环解法:
class Solution(object):
def getNumberSameAsIndex(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
start, end = 0, len(nums)
while(start <= end):
if start == end:
if nums[start] == start:
return start
else:
return -1
break
mid = int((start + end)/2)
if nums[mid] == mid:
return mid
else:
if nums[mid] < mid:
start = mid + 1
else:
end = mid - 1
二分查找,O(logn),递归解法:
class Solution(object):
def getNumberSameAsIndex(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
start, end = 0, len(nums)
return self.biSearch(nums, start, end)
def biSearch(self, nums, start, end):
if start == end:
if start == nums[start]:
return start
else:
return -1
mid = int((start + end)/2)
if nums[mid] == mid:
return mid
else:
if nums[mid] < mid:
start = mid + 1
else:
end = mid - 1
return self.biSearch(nums, start, end)