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

相关推荐
知南x5 小时前
【DPDK例程学习】(4) l2fwd
学习·word
努力努力再努力FFF5 小时前
大学四年AI能力规划:从入门学习到简历表达
人工智能·学习
Litluecat5 小时前
配合多角色提示语3,学习AI漫剧(刚开始学)
人工智能·学习·ai·提示词·短剧·漫剧
IronMurphy5 小时前
【算法五十七】146. LRU 缓存
算法·缓存
三品吉他手会点灯5 小时前
STM32F103 学习笔记-24-I2C-读写EEPROM(第1节)-I2C物理层介绍
笔记·stm32·学习
MartinYeung55 小时前
[论文学习]大型语言模型中个人可识别资讯(PII)的机器遗忘技术:UnlearnPII 基准与 PERMU_tok 方法的深度分析
人工智能·学习·语言模型
fanged5 小时前
Linux内核学习21--V4L2学习3(应用)(TODO)
学习
凌波粒6 小时前
LeetCode--108.将有序数组转换为二叉搜索树(二叉树)
算法·leetcode·职场和发展
liulilittle6 小时前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
浦信仿真大讲堂6 小时前
达索系统SIMULIA Abaqus 2026接触和约束的增强新功能介绍
人工智能·python·算法·仿真软件·达索软件