美文网首页
268. Missing Number

268. Missing Number

作者: jluemmmm | 来源:发表于2021-10-01 11:14 被阅读0次

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

异或操作

异或运算满足结合律,对一个数字进行两次完全相同的异或运算会返回原来的数。数组中有 n 个数,并且缺失的数在 [0, n]中,因此可以先到得到 [0, n]的异或值,再将结果对数组中的每一个数进行一次异或运算。

未缺失的数在[0, n]中各出现一次,异或后得到 0。缺失的数只在 [0, n]中出现一次,在数组中没有出现,最终的异或结果就是这个缺失的数字。

  • 时间复杂度O(n),空间复杂度O(1)
  • Runtime: 76 ms, faster than 88.62%
  • Memory Usage: 41.5 MB, less than 33.69%
/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function(nums) {
  let missing = nums.length;
  for (let i = 0; i < nums.length; i++) {
    missing ^= i ^ nums[i];
  }
  return missing;
};

高斯公式

  • 时间复杂度 O(N),空间复杂度O(1)
  • Runtime: 88 ms, faster than 52.81%
  • Memory Usage: 41.3 MB, less than 54.49%
/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function(nums) {
  const total = nums.length * (nums.length + 1) / 2;
  let sum = 0;
  for (let num of nums) {
    sum += num;
  }
  return total - sum;
};

相关文章

网友评论

      本文标题:268. Missing Number

      本文链接:https://www.haomeiwen.com/subject/rlaenltx.html