# 【LeetCode】 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.
> 給予一個陣列 `nums` 它包含 `n` 個不同的數字且都落在 `[0, n]` 之中,回傳範圍內唯一一個不在陣列中的數字。
## Example:
```
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.
```
## Solution
* 題目的 Follow up 中有提到,是否能提出一個答案使用 `O(1)` 的額外空間複雜度和 `O(n)` 的時間複雜度。
* 既然時間複雜度在 `O(n)`,答案就必定不需要排序。
* 我的想法是利用 `A XOR A = 0` 這點,把 0 ~ n 都 XOR 起來之後,再與陣列中每個數 XOR。
* 同樣的數字互相 XOR 都會不見,留下的數字即為答案。
### Code
```C++=1
class Solution {
public:
int missingNumber(vector<int>& nums) {
int temp = 0;
for(int i = 0; i < nums.size(); i++)
{
temp ^= nums[i];
temp ^= i;
}
return temp ^= nums.size();
}
};
```
###### tags: `LeetCode` `C++`