question:
question:
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?
first try:
class Solution { public int missingNumber(int[] nums) { int[] slot = new int[nums.length+1]; for(int i=0; i<nums.length; i++) { slot[nums[i]] = 1; } for(int i=0; i<slot.length; i++) { if(slot[i] == 0) { return i; } } return -1; } }
result:
second try:
class Solution { public int missingNumber(int[] nums) { int sum = 0, sum2 = 0; for(int i=0; i<nums.length; i++) { sum += nums[i]; } for(int i=0; i<=nums.length; i++) { sum2 += i; } return sum2-sum; } }
result:
conclusion:
数据集合的特点,使得常量空间复杂度成为可能。