一共N
个数范围在0 ~ n-1
之间; 但是数组的长度只是n - 1
所以有一个数缺失了,找出那个缺失的数字、
有两个关键信息;
- 数组是有序的,递增
- 数字都是唯一的,就少一个数字
二分
需要先将特殊情况排除掉;
- 数组为空
- 前
n - 1
个数都是正确的下标是[0, n - 2]
,缺少最后一个数
var missingNumber = function(nums) {
if (nums === null) return 0;
let len = nums.length;
if (nums[len - 1] == len - 1) return len;
let l = 0, r = nums.length - 1;
while (l < r) {
let mid = l + r >> 1;
if (nums[mid] != mid) r = mid;
else l = mid + 1;
}
return l;
};