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: 2Example 2:
Input: [9,6,4,2,3,5,7,0,1] Output: 8Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
问题描述,一个数组包含n个不重复的数从0,1,2,3,...n 找到那个不在数组中的数
我的思路:先将数组排序再进行比较.但是这样子效率很低,时间复杂度在O=n+排序所需时间;
public int MissingNumber(int[] nums) { Array.Sort(nums); for(int i=0; i < nums.Length; i++){ if(i != nums[i]) return i; } return nums.Length; }
第二种思路: 从0到n的和为(0+n)(n+1)/2 再计算数组的和。两和的差就是结果。该算法时间复杂度为O(n)
public int MissingNumber(int[] nums) { int n = nums.Length; int sum = n*(n+1)/2; int sums = nums.Sum(); return sum-sums; }