# 【LeetCode】 136. Single Number
## Description
> Given a non-empty array of integers, every element appears twice except for one. Find that single one.
> Note:
> Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
> 給一非空陣列的整數陣列,每個元素都會出現兩次,只有一個元素會出現一次。找到孤單的那個傢伙。
> 注意:
> 你的演算法應該是O(n)的複雜度,你可以不用額外的記憶體空間實作嗎?
## Example:
```
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
```
## Solution
* 兩種做法:
* 第一種:使用`hash-table`,有元素就加到集合內,已經有的就踢掉,最後集合內只會剩下一個數字。
* 第二種:使用`XOR`邏輯解,我們看看以下式子:
* `A XOR 0 = A`
* `A XOR A = 0`
* 因此我們只要把每個數都做XOR運算,最後的數字就是答案了。
### Code
* 第一種做法:
```C++=1
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_set<int> hash;
for(int i=0;i<nums.size();i++)
{
if(hash.find(nums[i])==hash.end())
hash.insert(nums[i]);
else
hash.erase(nums[i]);
}
auto ans = hash.begin();
return *ans;
}
};
```
* 第二種做法:
```C++=1
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
for(int i=0;i<nums.size();i++)
ans ^= nums[i];
return ans;
}
};
```
###### tags: `LeetCode` `C++`