【 每天学习一点算法 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)

相关推荐
仰泳的熊猫2 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
无极低码5 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发6 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
superior tigre6 小时前
22 括号生成
算法·深度优先
盐水冰7 小时前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
Hello小赵7 小时前
视频压缩编码学习(一)—— 基础知识大集合
学习
努力也学不会java7 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
旖-旎8 小时前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
ECT-OS-JiuHuaShan8 小时前
朱梁万有递归元定理,重构《易经》
算法·重构