消失的数字
数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。在O(n)时间内完成
异或的性质
- 0^x = x;
- x^x = 0; 同样的数异或两次得到零
- 异或满足交换律
实现思路:
- 先异或nums数字的所有数字,再异或[0,n]的所有数字:
- 由于相同的数异或会得到0,并且0异或任意数结果都是任意数,
- 所以在本题中,异或两次的会被变为0,异或一次的就不会发生变化:那么消失的数字就会出来了 比如 输入:[3,0,1] :先异或:0到n的所有数字:X^ 3^ 0 ^ 1 ;再异或数组: X^ 3^ 0 ^ 1^ 1 ^ 2^ 3 = 2; 即2是消失的数字。
int missingNumber(int* nums, int numsSize)
{
int x = 0;
int i = 0;
for (i = 0; i < numsSize; ++i)
{
x ^= nums[i];
}
for (i = 0; i < numsSize + 1; ++i)
{
x ^= i;
}
return x;
}
结语:认真研究,天天学习,加油!!