1. 程式人生 > >劍指Offer 陣列中數值和下標相等的元素

劍指Offer 陣列中數值和下標相等的元素

題目:

一個長度為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)