一、题目描述
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
二、示例
三、解题思路
- 我的第一个思路是直接进行暴力的匹配 看哪个的值和下标不一致,直接输出,刚开始的时候会疏忽一个问题就是缺失最后一个的情况,所以需要给数组的最后加上任意的一个值,方便进行比较!
- 二分法的思路进行比较
可以先进行左右两边的分别比较来缩小比较的范围
四、代码展示
/**
* @param {number[]} nums
* @return {number}
*/
var missingNumber = function(nums) {
nums.push('x')
let n = nums.length
for(let i = 0 ; i < n ; i++){
if(nums[i]!==i){
return i
}
}
};
/**
* @param {number[]} nums
* @return {number}
*/
var missingNumber = function(nums) {
let left = 0,
right = nums.length - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (mid === nums[mid]) {
left = mid + 1;
} else if (mid < nums[mid]) {
right = mid - 1;
}
}
return left;
};
五、结果