LeetCode刷題Easy篇Missing Number
阿新 • • 發佈:2018-12-20
題目
Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
Example 1:
Input: [3,0,1] Output: 2
Example 2:
Input: [9,6,4,2,3,5,7,0,1] Output: 8
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
十分鐘嘗試
我的可能思路
1. 排序
2. 利用空間換時間,下標是新陣列的位置,看新陣列哪個為空,就是缺少哪個
3. 存入map,並找到最大元素(不需要找到最大,因為是有序的,元素的size就是最大值+1),重新遍歷map,看每個元素+1,是否存在map中(最大元素除外)
但是這些演算法都不同時滿足要求:O(n)和常量儲存空間
看了一下答案利用高斯公式,求和:
class Solution { public int missingNumber(int[] nums) { int expectedSum = nums.length*(nums.length + 1)/2; int actualSum = 0; for (int num : nums) actualSum += num; return expectedSum - actualSum; } }