数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
思路1:求和相减
(n+1)*n/2 - (数组累加和)
时间复杂度:O(N)
空间复杂度:O(1)
int missingNumber(int* nums, int numsSize)
{
int N = numsSize;
int ret = N*(N+1)/2;
for(int i = 0;i < numsSize; i++)
{
ret -= nums[i];
}
return ret;
}
思路2:qsort()排序 冒泡
时间复杂度:O(log N*N) O(N^2)
空间复杂度:O(log N) O(1)
思路3:异或
开辟额外数组,然后找单身狗
空间复杂度:O(N)
知道大小
时间复杂度:O(N)
空间复杂度:O(1)
int missingNumber(int* nums, int numsSize)
{
int N = numsSize;
int x = 0;
for(size_t i = 0;i < numsSize; i++)
{
x ^= nums[i];
}
for(size_t j = 0;j <= N; j++)
{
x ^= j;
}
return x;
}