方法一:按位异或(找单身狗)
我们知道:按位异或^操作原则:相同为零,相异为一
所以 0^a=a a ^a=0 a ^b=b ^a
int missingNumber(int* nums, int numsSize){
int i = 0;
int tem1 = 0,tem2=0;
for (i = 0;i < numsSize;i++)
{tem1 = tem1 ^ nums[i];
}
for (i = 1;i <= numsSize;i++)
{tem2 = tem2 ^ i;
}
int missnum = tem1 ^ tem2;
return missnum;
}
tem1 ^ tem2时,相同的元素互相按位异或都会变成0,而消失的数字就会显现出来。
方法二:求和相减
int missingNumber(int* nums, int numsSize){int sum1=(1+numsSize)*numsSize/2;int sum2=0;for(int i=0;i<numsSize;i++){sum2=sum2+nums[i];}return sum1-sum2;
等差数列求和公式求前n个数的和