数组
nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
思路1:创建一个为0的变量,用这个变量来异或这个数组的全部元素,并将其保存。
int ret = 0;
ret ^= nums[i];
0异或任何一个数都是它本身。
异或的规则是对应位相同为0,相异为1
for(int i = 0; i < numsSize; i++)
{
ret ^= nums[i];
}
通过这样可以将所有的异或的结果保存一起。
题目说着少了一位数字,那在通过一个循环,将ret^到数字,出现过的全部都会消除掉,剩下的就是那个缺少的数字了。
for(i = 0; i <= numsSize; i++)
{
ret ^= i;
}
这里有个关键的,i < numsSize 是少了一位数字,i <= numsSize就可以将那个缺少的数字补回来。
完整代码:
int missingNumber(int* nums, int numsSize){
int ret = 0;
for(int i = 0;i < numsSize; i++)
{
ret ^= nums[i];
}
for(int i = 0;i <= numsSize; i++)
{
ret ^= i;
}
return ret;
}