/*一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。
在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。*/
// Math.floor(x):对一个数向下取整
// 二分查找法
var findmissingNumber = function (nums){
let len = nums.length;
// 判断是否是第一个或最后一个缺失
if (nums[0] != 0){
return 0
}
if (nums[len-1] != len){
return len
}
// 二分查找
let i=0, j=len-1,mid;
while(i<j) { //循环别忘记
mid = Math.floor((i + j) / 2);
if (nums[mid] == mid) { //中间值一样说明前面的值没有出问题
if (nums[mid + 1] != mid + 1) return mid + 1;
i = mid + 1;
} else {
if (nums[mid - 1] == mid - 1) return mid;
j = mid - 1;
}
}
}
console.log(findmissingNumber([0,1,2,3,4,6]))
0-n之间的缺失数字(由于是有序的0-n-1的数值,所以使用二分查找,判断当前数值是否和索引一样,不然就继续循环)
最新推荐文章于 2021-08-30 23:56:58 发布