数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
示例1:
输入:[3,0,1]
输出:2
思路1: 求和相减
(n+1)*n-(数组中所有相加)
时间复杂度:O(N)
空间复杂度:O(1)
int missingNumber(int* nums, int numsSize){
int num = numsSize;
int ret = num*(num+1)/2;
for(int i = 0;i<numsSize;i++)
{
ret-=nums[i];
}
return ret;
}
思路2:qsort排序
y[0,1,3]
0+1=1 =>下一个
0+1+1!=3 =>缺失的是2
时间复杂度:O(logN*N) ——快速排序
空间复杂度:O(logN)
思路3:异或
两个相同的数会抵消
int missingNumber(int* nums, int numsSize){
int num = numsSize;
int x = 0;
for(int i = 0;i<num;i++)
{
x^=nums[i];
}
for(int i = 0;i<num+1;i++)
{
x^=i;
}
return x;
}