本文最后更新于: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]$为空时跳出);
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
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!