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

相关推荐
世人万千丶20 分钟前
鸿蒙Flutter Flex布局性能优化
学习·flutter·性能优化·harmonyos·鸿蒙·鸿蒙系统
tkevinjd27 分钟前
力扣148-排序链表
算法·leetcode·链表
qeen8740 分钟前
【C++】vector的模拟实现详解(二)
c++·学习·算法·迭代器·stl
YM52e1 小时前
鸿蒙 Flutter 渐变效果详解:LinearGradient、RadialGradient、SweepGradient
android·学习·flutter·华为·harmonyos·鸿蒙
YM52e1 小时前
鸿蒙 Flutter BoxDecoration装饰:打造精美UI效果
学习·flutter·ui·华为·harmonyos·鸿蒙
承渊政道2 小时前
【Python学习】(了解使用库、标准库、第三方库以及综合案例实操)
python·学习·pycharm·标准库·第三方库·使用库·综合案例
YM52e3 小时前
鸿蒙Flutter Card组件:Material设计风格卡片
android·学习·flutter·华为·harmonyos·鸿蒙
YangYang9YangYan4 小时前
2026通信工程专业学生无项目经验学习数据分析的价值与路径
学习·数据挖掘·数据分析
可编程芯片开发13 小时前
基于MATLAB的PEF湍流风场生成器模拟与仿真
算法
世人万千丶13 小时前
鸿蒙Flutter TextStyle样式配置
学习·flutter·harmonyos·鸿蒙