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?
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
思路:1.算数,求和然后减去这个数组的 和,就是missing的数。
class Solution {
public int missingNumber(int[] nums) {
int n = nums.length;
int sum = n * (n+1) / 2;
int cursum = 0;
for(Integer i: nums) {
cursum += i;
}
return sum - cursum;
}
}
思路:2.异或运算,相同为0,相异为1,同样的数^,会湮灭;所以可以用1~n去攻击这个数组,剩下的就是missing number。
class Solution {
public int missingNumber(int[] nums) {
if(nums == null || nums.length == 0) {
return 0;
}
int res = 0;
for(int i = 0; i < nums.length; i++) {
res ^= nums[i] ^(i + 1);
}
return res;
}
}