1. 题目描述
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
2. 思路
思路1
想到之前C语言习题—找单身狗,使用异或,就是异或相同的会抵消掉。
利用异或的特性,val = val ^ x ^ x。对同一个值异或两次,那么结果等于它本身,所以我们对val从0-nums.length进行异或,同时对nums数组中的值进行异或,出现重复的会消失,所以最后val的值是只出现一次的数字,也就是nums数组中缺失的那个数字。
思路2
数组求和减去数组现在所有值,得到的就是缺少的数字
3. 代码实现
异或思路实现
int missingNumber(int* nums, int numsSize) {
int val = 0;
int i = 0;
for(i= 0; i<numsSize;++i)
{
val ^=nums[i];
}
for(i= 0;i<numsSize+1;++i)
{
val ^=i;
}
return val;
}
公式求解实现
int missingNumber(int* nums, int numsSize) {
int sum = numsSize*(1+numsSize)/2;
int i = 0;
for(i = 0;i <numsSize;i++)
{
sum -= nums[i];
}
return sum;
}