解题思路
根据示例,可以总结出以下结论:
- 1.获取数组的长度n,数组的长度就是范围,也就是[0,n]
- 2.判断当前的数字是否在[0,n]的范围内
- 3.可以利用n—判断这个值是否在数组内
因而,代码如下:
代码
var missingNumber = function(nums) {
const n = nums.length;
for(let i = n;i>=0;i--){
if(!nums.includes(i)){
return i;
}
}
};
其他思路
数学方式
根据题解,可以利用数学的方式。将[0,n]的和计算出来total,然后计算数组的和arrSum,用total - arrSum就是差值
// 利用数学
var missingNumber1 = function(nums) {
const n = nums.length;
let total = Math.floor(n * (n + 1) / 2);
let arrSum = 0;
for (let i = 0; i < n; i++) {
arrSum += nums[i];
}
return total - arrSum;
};
哈希方式
此外,还可以利用哈希的方法
var missingNumber2 = function(nums) {
const set = new Set();
const n = nums.length;
for (let i = 0; i < n; i++) {
set.add(nums[i]);
}
let missing = -1;
for (let i = 0; i <= n; i++) {
if (!set.has(i)) {
missing = i;
break;
}
}
return missing;
};