Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

268. 丢失的数字 #54

Open
buuing opened this issue Nov 6, 2021 · 0 comments
Open

268. 丢失的数字 #54

buuing opened this issue Nov 6, 2021 · 0 comments

Comments

@buuing
Copy link
Owner

buuing commented Nov 6, 2021

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

示例 1:

输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。

示例 2:

输入:nums = [0,1]
输出:2
解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。

示例 3:

输入:nums = [9,6,4,2,3,5,7,0,1]
输出:8
解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。

示例 4:

输入:nums = [0]
输出:1
解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。

提示:

  • n == nums.length
  • 1 <= n <= 104
  • 0 <= nums[i] <= n
  • nums 中的所有数字都 独一无二

进阶:你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/missing-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。




  • 哈希表
const missingNumber = nums => {
  const arr = [], max = nums.length
  while (nums.length) {
    const n = nums.shift()
    arr[n] = true
  }
  for (let i = 0; i <= max; i++) {
    if (!arr[i]) return i
  }
}
  • 数学

先利用等差数列求和公式得到1~nums.length的所有和, 然后拿着和再一一减去nums里所有的数字, 最后剩下的值就是缺少的数字

const missingNumber = nums => {
  const max = nums.length
  let sum = (1 + max) * (max / 2)
  while (nums.length) {
    sum -= nums.pop()
  }
  return sum
}
  • 位运算

这道题和136. 只出现一次的数字是同一个思路

假设数组为: [3, 0, 1]
那就执行: (3^0^1) ^ (0^1^2^3)
此时就会得到缺失的数字2

本以为这个方法的效率最快, 结果发现竟然还没有数学方式快

const missingNumber = nums => {
  let res = 0, len = nums.length
  for (let i = 0; i <= len; i++) {
    res ^= nums[i]
    res ^= i
  }
  return res
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant