268. Missing Number
Description
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.length
1 <= n <= 104
0 <= nums[i] <= n
- All the numbers of
nums
are unique.
Follow up: Could you implement a solution using only O(1)
extra space complexity and O(n)
runtime complexity?
Solutions
Solution 1: Bitwise Operation
The XOR operation has the following properties:
- Any number XOR 0 is still the original number, i.e., \(x \oplus 0 = x\);
- Any number XOR itself is 0, i.e., \(x \oplus x = 0\);
Therefore, we can traverse the array, perform XOR operation between each element and the numbers \([0,..n]\), and the final result will be the missing number.
The time complexity is \(O(n)\), where \(n\) is the length of the array. The space complexity is \(O(1)\).
1 2 3 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Solution 2: Mathematics
We can also solve this problem using mathematics. By calculating the sum of \([0,..n]\), subtracting the sum of all numbers in the array, we can obtain the missing number.
The time complexity is \(O(n)\), where \(n\) is the length of the array. The space complexity is \(O(1)\).
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|