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 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:
    1. 宣告 result 為 0。
    2. 宣告 numLength 為 nums 的長度。
    3. 如果沒有長度,返回 0。
    4. 執行 nums 長度的迴圈,且每一輪都將 result 加上 nums 陣列中的數字,
    同時減去當前第 i 輪的 i 值。
    (正常數列的加總 – 減去該陣列實際值得加總 = 缺少的數字)
    5. 回傳 nums 的長度減去 result。

    Code 1: BigO(n)

    var missingNumber = function(nums) {
      let length = nums.length,
          numsTotal = 0
    
      if (length === 0) return 0;
    
      for (let i = 0; i < length; i++) {
        numsTotal += nums[i] - i
      }
    
      return length - numsTotal;
    };
    

    FlowChart:
    Example 1

    Input: nums = [3,0,1]
    
    numsTotal += nums[i] - i
    numsTotal = 0 + 3 - 0 = 3
    numsTotal = 3 + 0 - 1 = 2
    numsTotal = 2 + 1 - 2 = 1
    
    return length - numsTotal = 3 - 1 = 2
    

    Example 2

    Input: nums = [0,1]
    
    numsTotal += nums[i] - i
    numsTotal = 0 + 0 - 0 = 0
    numsTotal = 0 + 1 - 1 = 0
    
    return length - numsTotal = 2 - 0 = 2
    

    Example 3

    Input: nums = [9,6,4,2,3,5,7,0,1]
    
    numsTotal += nums[i] - i
    numsTotal = 0 + 9 - 0 = 9
    numsTotal = 9 + 6 - 1 = 14
    numsTotal = 14 + 4 - 2 = 16
    numsTotal = 16 + 2 - 3 = 15
    numsTotal = 15 + 3 - 4 = 14
    numsTotal = 14 + 5 - 5 = 14
    numsTotal = 14 + 7 - 6 = 15
    numsTotal = 15 + 0 - 7 = 8
    numsTotal = 8 + 1 - 8 = 1
    
    return length - numsTotal = 9 - 1 = 8
    

    Code 2: BigO(2n)

    var missingNumber = function(nums) {
      let length = nums.length
          lengthTotal = 0,
          numsTotal = 0
      
      if (length === 0) return 0;
    
      for (let i = 0; i <= length; i++) {
        lengthTotal += i
      }
      for (let i = 0; i < length; i++) {
        numsTotal += nums[i]
      }
      return lengthTotal - numsTotal;  
    };
    

    Code 3: BigO(n) ES6 Set

    var missingNumber = function(nums) {
      let numsSet = new Set(nums),
      lostNumbers = []
    
      for (let i = 0; i <= nums.length; i++) {
        if (!numsSet.has(i)) lostNumbers.push(i)
      }
      return lostNumbers;
    };
    

    Code 4: BigO(n) ES6 Set

    var missingNumber = function(nums) {
      let numsSet = new Set(nums)
    
      for (let i = 0; i <= nums.length; i++) {
        if (!numsSet.has(i)) return i;
      }
    };
    

    延伸練習
    448. Find All Numbers Disappeared in an Array