剑指 Offer 53 - II. 0~n-1中缺失的数字

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

示例 1:

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

示例 2:


输入: [0,1,2,3,4,5,6,7,9]
输出: 8

思路:排序数组问题一般都使用二分,不建议暴力搜索

根据题意,数组可以按照以下规则划分为两部分。

  • 左子数组: nums[i]=i;
  • 右子数组: nums[i]!=i;
class Solution {
    public int missingNumber(int[] nums) {
      int i=0,j=nums.length-1;
      while(i<=j){
          int mid=(i+j)/2;
          if(nums[mid]==mid)i=mid+1;
          else j=mid-1;
      }  
        return i;
    }
}