题目:
数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
解法:
int missingNumber(int* nums, int numsSize){
int val=0;
for(int i=0;i<numsSize;++i)
{
val^=nums[i];
}
for(int i=0;i<=numsSize;++i)
{
val^=i;
}
return val;
}
举例详解:
假设输入是【3 0 1】
对于第一个for循环:
第一次:val=0^3
第二次:val=0^3^0
第三次:val=0^3^0^1
对于第二个for循环:、
第一次:val=0^3^0^1^0
第二次:val=0^3^0^1^0^1
第三次:val=0^3^0^1^0^1^2
第四次:val=0^3^0^1^0^1^2^3
由于异或符合交换律,所以
val=0^3^0^1^0^1^2^3=0^0^0^1^1^3^3^2=2
(相同两个数异或值为0)