数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
注意:本题相对书上原题稍作改动
示例 1:
输入:[3,0,1]
输出:2
示例 2:
输入:[9,6,4,2,3,5,7,0,1]
输出:8
题解1:
使用位图
class Solution {
public int missingNumber(int[] nums) {
boolean[] res = new boolean[nums.length+1];
for (int i=0;i<nums.length;i++) {
res[nums[i]] = true;
}
for (int i=0;i<res.length;i++) {
if (!res[i]) {
return i;
}
}
return -1;
}
}
题解2:
使用异或
class Solution {
public int missingNumber(int[] nums) {
int n=nums.length;
int ret = 0;
for (int i=0;i<=n;i++) {
ret ^= i;
}
for (int i=0;i<n;i++) {
ret ^= nums[i];
}
return ret;
}
}