leetcode 268. 缺失数字

发布日期:

首先是我自己乱写的,弱智写法:排序然后不断+1找到没有的那个

/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function(nums) {
    if(nums.length == 1 && nums[0] == 0) return 1
    if(nums.length == 1) return 0
    nums.sort(function(a,b) { return a-b})
    if (nums[0] != 0) return 0
    for( let i =0; i < nums.length ; i++) {
        if(nums.includes(nums[i]+1) === false) {
            console.log(nums[i]+1)
            return nums[i]+1
        }
    }
};

第二种方法是我看了解析知道的,可以把0…数组长度+1求和减去原本数组的和,就是缺的这个数字了,效率快很多

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

第三种办法是个骚操作了,异或运算,我也没整明白

/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function(nums) {
    let res = nums.length
    for(let i = 0; i <nums.length; ++i) {
        res ^= nums[i]
        res ^= i
    }
    return res
};

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注