Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.
You must implement a solution with a linear runtime complexity and use only constant extra space.
給予一個非空白的整數陣列 nums,每一個元素皆出現兩次只有一個沒有。 尋找出現一次的元素。 你必須實現具有線性運行複雜度的解決方案,不能使用額外的空間。
Example 1:
Input: nums = [2,2,1] Output: 1
Example 2:
Input: nums = [4,1,2,1,2] Output: 4
Example 3:
Input: nums = [1] Output: 1
Solution:
1. 如果 nums 中只有一個數值,則返回該數值。
2. 宣告一個 box 物件 {}。
3. 將 nums 中的數值與次數依序放入 box 物件中。
4. 依序尋找物件中數值的次數為 1,回傳該數值。
Code 1: two for loop
var singleNumber = function(nums) {
  if (nums.length ===1) return nums[0]
  let box = {}
  for (let i = 0; i < nums.length; i++) {
    if (box[nums[i]]) {
      box[nums[i]]++
    } else {
      box[nums[i]] = 1
    }
  }
  for (let num in box) {
    if (box[num] === 1) {
      return num;
    }
  }   
};
FlowChart:
Example 1
Input: nums = [2,2,1]
nums.length = 3
box = {}
step.1
box = {'2': 1}
box = {'2': 2}
box = {'1': 1, '2': 1}
step.2 
box = {'1': 1} = 1, return i //1
Example 2
Input: nums = [4,1,2,1,2]
nums.lenght = 5
box = {}
step.1
box = {'4': 1}
box = {'1': 1, '4': 1}
box = {'1': 1, '2': 1, '4': 1}
box = {'1': 2, '2': 1, '4': 1}
box = {'1': 2, '2': 2, '4': 1}
step.2 
box = {'1': 2} <> 1
box = {'2': 2} <> 1
box = {'4': 1} = 1, return i //1
Example 3
Input: nums = [1] nums.length = 1, return nums[0] //1
Code 2: two for loop
var singleNumber = function(nums) {
  if (nums.length === 1) return nums[0]
  let box = {}
  for (let i = 0; i < nums.length; i++) {
    box[nums[i]] = (box[nums[i]] || 0) + 1
  }
  for (let num in box) {
    if (box[num] === 1) return num;
  }  
};
Code 3: XOR
var singleNumber = function(nums) {
    for (let i = 1; i < nums.length; i++) {
        nums[0] ^= nums[i]
    }
    return nums[0];
};
^= 運算符號
^= : 使用二進制進行結果分配。(1 + 1 = 0, 1 + 0 = 1, 0 + 1 = 1)
    
                                               8421
let a = 5;      // 00000000000000000000000000000101
a ^= 3;         // 00000000000000000000000000000011
console.log(a); // 00000000000000000000000000000110
// expected output: 6
Input: nums = [2,2,1]
Binary: 
       [0000]
        8421
0010 //nums[0] = 2
0010 //nums[1] = 2
-----------------
0000 // 0 
0000 //nums[0] = 0
0001 //nums[1] = 1
-----------------
0001 // 1 
0001 //nums[0] = 1