数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在0(n)时间内完成吗?
实例1:
输入:[3,0,1]
输出:2
思路:num跟数组中数和[0,N]之间所有异或,结果为要找的数。
原理 :相同的两个数异或为0,而数组中没有6,[0,N]之间都有。
异或:对应二进制位,相同为0,不同为1,不会产生进位
int missingNumber(int* num,int numsSize)
{
int x=0;
for(size_t i=0;i<numsSize;++i)
{
x^=nums[i];
}
for(size_t i=0;i<=numsSize;++i)
{
x^=i;
}
return x;
}