int missingNumber(int* nums, int numsSize)
{
int n = 0;
for (int i = 0; i < numsSize; i++)//将数组中的数字全部异或在一起
{
n ^= nums[i];
}
for (int i = 0; i < numsSize + 1; i++)//通过异或相同为0不同为1的原理,同一个数字异或两次
{ //就会相互抵消,最后剩下的就是只异或了一次的数
n ^= i;
}
return n;
}
int main()
{
int a[] = { 0,1,3 };
int sz = sizeof(a)/sizeof(a[0]);
int num = missingNumber(a, sz);
printf("%d", num);
return 0;
}
通过异或的特性找到一个有序数组中缺失的一个数字。
在这段代码中,0,1,3总共异或了两次。
而2在第二个循环中被异或了一次,所以结果是2。