给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。
示例 1: 输入: [3,0,1] 输出: 2 示例 2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8
//排序后检查 public int MissingNumber(int[] nums) { Array.Sort(nums); if(nums.Length == 0 || nums[0] == 1) return 0; for(int i = 0;i<nums.Length - 1;i++) { if(nums[i] - nums[i+1] != -1) { return nums[i] + 1; } } return nums[nums.Length-1]+1; }
//高斯求和 public int MissingNumber(int[] nums) { int sum = 0; for(int i = 0;i<nums.Length;i++) { sum += nums[i]; } //因为第一个元素为0,所以... return nums.Length * (nums.Length+1)/2 - sum; }
//异或法 public int MissingNumber(int[] nums) { int xor = 0; int i = 0; for(;i<nums.Length;i++) { //和相同的数异或两次为本身,和0异或为本身 xor = xor ^ i ^ nums[i]; } return xor ^ i; }