题目地址

解题思路

根据示例,可以总结出以下结论:

  • 1.获取数组的长度n,数组的长度就是范围,也就是[0,n]
  • 2.判断当前的数字是否在[0,n]的范围内
  • 3.可以利用n—判断这个值是否在数组内

因而,代码如下:

代码

  1. var missingNumber = function(nums) {
  2. const n = nums.length;
  3. for(let i = n;i>=0;i--){
  4. if(!nums.includes(i)){
  5. return i;
  6. }
  7. }
  8. };

其他思路

数学方式

根据题解,可以利用数学的方式。将[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;
};