数组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;
}
给定一个包含0到n所有整数的数组,但缺少了一个,文章提出了三种方法来找到这个缺失的整数:1)通过求和相减,在O(n)时间复杂度内找到;2)使用快速排序,但时间复杂度为O(logN*N);3)利用异或性质,也在O(n)时间复杂度内解决。

被折叠的 条评论
为什么被折叠?



