本文最后更新于:2020年11月18日 下午

一个长度为n-1的递增排序数组中所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0-n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

示例1:

输入:[0,1,3]
输出:2

限制:

1 <= 数组长度 <= 10000

class Solution:
	def missingNumber(self, nums):

解题思路:

排序数组中的搜索问题,首先想到二分法解决。根据题意,数组可以按照以下规则划分为两部分。

  • 左子数组:$nums[i] = i$;
  • 右子数组:$nums[i] \neq i$;

算法解析:

1.初始化:左边界$i=0$,有边界$j=len(nums)-1$;代表闭区间$[i,j]$。

2.循环二分:当$i<j$时循环(即当闭区间$[i,j]$为空时跳出);

  1. class Solution:
    	def missingNumber(self, nums):
    		i,j = 0, len(nums) - 1
    		while i <$=$ j:
    			m = (i + j) // 2
    			if nums[m] == m: i = m+1
    			else: j = m-1
    		return i