剑指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)

猜你喜欢

转载自blog.csdn.net/u013796880/article/details/84878636