【 每天学习一点算法 2026/01/26】缺失数字

每天学习一点算法 2026/01/26

题目:缺失数字

给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

  1. 最容易想到的方法就是排序遍历找出缺失的数字,先对数组进行排序比较元素和下标,如果不等就是缺失的数字,如果遍历完成说明缺失的是数字 n

    typescript 复制代码
    function missingNumber(nums: number[]): number {
      nums.sort((a, b) => a - b)
      for (let i = 0; i < nums.length; i++) {
        if (i !== nums[i]) {
          return i
        }
      }
      return nums.length
    };
  2. 因为完整的 [0, n] 是连续整数,我们可以计算出完整范围所有数字的总和,再遍历求和 nums 中的数字,两者之差就是缺失的数字。

    typescript 复制代码
    function missingNumber(nums: number[]): number {
      const sum = nums.length * (nums.length + 1) / 2
      let arrSum = 0
      for (let i = 0; i < nums.length; i++) {
        arrSum += nums[i]
      }
      return sum - arrSum
    };
  3. 此外我们还可以利用位运算来解决这个问题

    我们知道 a ^ a = 0, a ^ 0 = a, 0 ^ a = a,数组排序后所有元素进行异或运算结果和排序前的结果是一样的,那我们将 [1, n] 所有数字跟 nums 里的所有数字进行异或运算,结果就是 nums 缺失的数字。

    typescript 复制代码
    function missingNumber(nums: number[]): number {
      let a = 0
      for (let i = 0; i < nums.length; i++) {
        a ^= nums[i] ^ (i + 1)
      }
      return a
    };

题目来源:力扣(LeetCode)

相关推荐
李日华大战鸡红1 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
灯澜忆梦2 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下2 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J2 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛2 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有3 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111113 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS3 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
kkkkkkkkkk_Z3 小时前
新手自学嵌入式 | 学习日记:异常与中断基础、i.MX6ULL裸机开发环境搭建、GPIO模块与点灯原理
学习
不会就选b3 小时前
算法日常・每日刷题--<动态规划>14
算法