# 【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++`