MissingNumber
Problem
https://leetcode.com/problems/missing-number/
Given an array nums containing n distinct numbers in the range
[0, n], return the only number in the range that is missing from
the array.
Example 1:
Input: nums = [3,0,1]
Output: 2
Explanation:
n = 3 since there are 3 numbers, so all numbers are in the range
[0,3]. 2 is the missing number in the range since it does not
appear in nums.
Example 2:
Input: nums = [0,1]
Output: 2
Explanation:
n = 2 since there are 2 numbers, so all numbers are in the range
[0,2]. 2 is the missing number in the range since it does not
appear in nums.
Example 3:
Input: nums = [9,6,4,2,3,5,7,0,1]
Output: 8
Explanation:
n = 9 since there are 9 numbers, so all numbers are in the range
[0,9]. 8 is the missing number in the range since it does not
appear in nums.
Constraints:
n == nums.length1 <= n <= 10:sup:`4`0 <= nums[i] <= nAll the numbers of
numsare unique.
Follow up: Could you implement a solution using only O(1) extra
space complexity and O(n) runtime complexity?
Solution
Let \(m \in \{1, ..., n\}\) be the missing number. Since nums
\(= \{1, ..., n\} - \{m\}\),
Use the formula
to calculate the the sum
from 1 to \(n\) quickly. Note that \(n\) is one more than the number of
elements in nums.
Pattern
Array, Hash Table, Math, Binary Search, Bit Manipulation, Sorting
Code
from typing import List
def missingNumber(nums: List[int]) -> int:
"""Find the single missing number in a list of integers.
"""
n = len(nums)
s = sum(nums)
return n * (n + 1) // 2 - s
Test
>>> from MissingNumber import missingNumber
>>> list1 = list(range(4))
>>> list1.remove(2)
>>> missingNumber(list1)
2
>>> list2 = list(range(100))
>>> list2.remove(47)
>>> missingNumber(list2)
47
- MissingNumber.missingNumber(nums: List[int]) int
Find the single missing number in a list of integers.