数组
nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
思路1:排序 + 遍历
(下一个数不等于上一个数+1,这下一个数就是消失的数字)
时间复杂程度O(logN*N)
思路2:0+N等差数公式计算结果 - 数组中的值,结果就是消失的数字。
时间复杂度O(N)
代码:
int missingNumber(int* nums, int numsSize)
{
int N = numsSize;
int ret = N * (N + 1) / 2;
int i = 0;
for (i = 0; i < N; i++)
{
ret -= nums[i];
}
return ret;
}
思路3:单身狗思路:异或
时间复杂度O(N)
代码:
int missingNumber(int* nums, int numsSize)
{
//0 1 ... N
//数组中的值
int N = numsSize;
int x = 0;
int i = 0;
for (i = 0; i <= N; i++)
{
x ^= i;
}
for (i = 0; i < N; i++)
{
x ^= nums[i];
}
return x;
}