欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode算法题-268.缺失数字-javascript(二十六)

程序员文章站 2024-03-07 23:13:15
...

解法一(排序比对)

LeetCode算法题-268.缺失数字-javascript(二十六)

  • 排序
  • 一一比对
var missingNumber = function(nums) {
    nums = nums.sort((a, b)=>{
        return a-b
    })
    if (nums[nums.length-1] != nums.length) {
        return nums.length;
    } else if (nums[0] != 0) {
        return 0;
    }
    var arr = []
    for(let i = 1; i < nums.length; i++){
        let temp = nums[i-1]+1
        if(nums[i] !== temp){
            return temp
        }
    }
};

解法二(哈希-key:value)

LeetCode算法题-268.缺失数字-javascript(二十六)

  • 利用哈希查询的O(1)的时间复杂度,优化查询时间
  • 不需要排序
var missingNumber = function(nums) {
    var obj = {}
    for(let i = 0; i < nums.length; i++){
        obj[nums[i]] = 1
    }
    for(let i = 0; i < nums.length + 1; i++){
        if(!obj[i]){
            return i
        }
    }
    return -1
};

解法三(位运算)

LeetCode算法题-268.缺失数字-javascript(二十六)
位运算里的异或运算有一个特点,两次异或同一个数最后结果不变

如果是1-9的数字与下标进行以后运算,得到的值一定是那个未匹配上的

var missingNumber = function(nums) {
    let len = nums.length;
    for (let i = 0; i < nums.length; i++) {
        len ^= i ^ nums[i];
    }
    return len;
}

解法四(数学思路)

  • 1-9的数组,总和何以得出(线性求和大家应该会吧。。。)
  • 参数数组的总和可以求出,做差即可

LeetCode算法题-268.缺失数字-javascript(二十六)

var missingNumber = function(nums) {
    var len = nums.length
    var sum = len*(len+1)/2
    var res = 0
    for(let i = 0; i < len; i++){
       res += nums[i]
    }
    return sum-res
}