劍指Offer 陣列中數值和下標相等的元素
阿新 • • 發佈:2018-12-10
題目:
一個長度為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)