LeetCode题解 => 268.缺失数字(二十六)

汇总:LeetCode题解 专栏收录该内容
128 篇文章 1 订阅

缺失数字

一、LeetCode题解

瞧一瞧~

二、算法题

题目

给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。

示例 1:

输入: [3,0,1]
输出: 2

示例 2:

输入: [9,6,4,2,3,5,7,0,1]
输出: 8

解法一(排序比对)

在这里插入图片描述

  • 排序
  • 一一比对
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)

在这里插入图片描述

  • 利用哈希查询的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
};

解法三(位运算)

在这里插入图片描述
位运算里的异或运算有一个特点,两次异或同一个数最后结果不变

如果是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的数组,总和何以得出(线性求和大家应该会吧。。。)
  • 参数数组的总和可以求出,做差即可

在这里插入图片描述

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
}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值