数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数
借助异或的性质:
A^A = 0;
A^0 = A;
A ^ B ^ B = A;
数组中有的数字一定会和数组的索引构成一对重复数字,由性质3 最终会消掉。其中,N 可以和数组的长度构成一对重复,因此最终还要异或一下数组的长度,然后借助性质2,我们将初始值设置为0;那么一个循环下来,最后的结果就是那个消失的数。
public int missingNumber(int[] nums) {
int res = 0;
for(int i=0; i<nums.length; i++){
res ^= i;
res ^= nums[i];
}
res ^= nums.length;
return res;
}