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