题目:
数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
解析:
给一个值x=0
x先跟[0,n]的所有值异或
x在跟数组中每个值异或
最后x就是缺的那个数字
因为缺了一个数字,n比nums数组里的整数个数多1
所以上面的循环是小于等于 //i<=numsSize
而下面的循环是小于 //i<numsSize
/*此源代码是在力扣运行的测试代码*/
源代码:
int missingNumber(int* nums, int numsSize){
int x=0;
for(int i=0;i<=numsSize;++i){
x^=i;
}
for(int i=0;i<numsSize;++i){
x^=nums[i];
}
return x;
}
能在编译器里进行验证的代码:
#include<stdio.h>
int main(){
int nums[]={9,6,4,2,3,5,7,0,1};
int x=0;
int numsSize=9;
for(int i=0;i<=numsSize;++i){
x^=i;
}
for(int i=0;i<numsSize;++i){
x^=nums[i];
}
printf("x=%d",x);
return 0;
}