1、数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。规定时间复杂度为O(n)
输入:[3,0,1]
输出:2
输入:[9,6,4,2,3,5,7,0,1]
输出:8
思路一:排序算法
时间复杂度不符合
最快的排序时间复杂度为O(N*logN)
思路二:十个数求和后的值为ret1减去数组中的数为ret2
ret1-ret2就是我们要找的数
思路三:
按位异或(相同为0,相异为1)
两个相同的数字,异或到一起就是0
数组中数依次跟0-N的所有异或,最后剩下的数据就是缺的呢个数字
int missingNumber(int* nums, int numsSize) {
int x = 0;
for (int i = 0; i < numsSize; ++i)
{
x ^= nums[i];
}
for (int j = 0; j < numsSize+1; ++j)
{
x ^= j;
}
return x;
}