Given an array containing n distinct numbers taken from 0, 1, 2, ..., n
, find the one that is missing from the array.
For example,
Given nums = [0, 1, 3]
return 2
.
Note:
Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
解题思路:
方法一:求和法。算出0..n 的和然后减去数组中值的和,就是Missing Number
方法二:Bit Manipulation,用异或。类似Leetcode Single Number。
既然0到n之间少了一个数,我们将这个少了一个数的数组合0到n之间完整的数组异或一下,那么相同的数字都变为0了,剩下的就是少了的那个数字了。
Java code:
方法一:
public class Solution { public int missingNumber(int[] nums) { int n = nums.length; int sum = n * (n + 1) / 2; for(int i = 0; i < n; i++) { sum -= nums[i]; } return sum; } }
方法二:
public class Solution { public int missingNumber(int[] nums) { int result = 0; for(int i = 0; i < nums.length; i++){ result ^= (i+1) ^ nums[i]; } return result; } }
Reference:
1. http://www.cnblogs.com/grandyang/p/4756677.html
2. https://leetcode.com/discuss/61256/java-missing-number-solution-o-1-space-and-n-time-complexity