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

相关推荐
residual_fan8 小时前
持续对比强化学习(Continual Contrastive Reinforcement Learning)论文分享
人工智能·算法·数据挖掘·数据分析
s_w.h8 小时前
【 计网 】序列化与反序列化
linux·服务器·网络·算法·bash
信奥卷王8 小时前
2025年09月GESPC++五级真题解析(含视频)
算法
白狐_7988 小时前
408 数据结构|外部排序:流程与 k 路归并
数据结构·算法
晨欣8 小时前
NVIDIA GPU 架构演进学习笔记(GPT-5.6 Terra 生成)
笔记·学习·gpu·显卡·nvidia·英伟达
闻缺陷则喜何志丹8 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
小雪崩9 小时前
嵌入式学习 day40:数据库
数据库·学习
一条破秋裤9 小时前
17_ADC原理与转换模式
笔记·stm32·学习
leihefeng9 小时前
手写数字识别:KNN vs 逻辑回归实战
python·算法·机器学习·逻辑回归·scikit-learn
全栈技术负责人9 小时前
DeepSeek Harness 业务工具权限插件 dsh-tool-permission设计思路
网络·算法·ai·ai编程