一个长度为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
二分法
情况1:数组中都是有序的,例如[0,1,2] 那么缺少的是3,这种情况只需要return nums.length
情况2:数组中间有缺失的数字,可以通过二分法找出缺失的数字,根据数组的下标是连续且递增的,通过判断下标和数组每一位的值是否相等找到缺失的值。
/**
* @param {number[]} nums
* @return {number}
*/
var missingNumber = function(nums) {
var len = nums.length-1;
if(len === nums[len]) return len+1;
var left = 0;
var right = len;
while(left<=right){
var mid = parseInt((left+right)/2);
mid === nums[mid] ? left=mid+1 : right=mid-1;
}
return left;
};