题目内容
- 数组nums包含从0到n的所有整数,但是其中缺了一个,请编写代码找出那个却失的整数。
- 你有办法在O(n)时间内完成吗
示例:输入[3,0,1]输出2。
加减法
#include <stdio.h>
int missingNumber(int* nums,int numsSize)
{
int ret1 = 0;
int ret2 = 0;
for(int i = 0;i < numsSize;i++)
{
ret2 += nums[i];
}
for(int j = 0;j < numsSize + 1;j++)
{
ret1 += j;
}
return ret1 - ret2;
}
int main()
{
int nums[]= {0,1,2,3,4,5,6,8,9,10};
int sz = sizeof(nums)/sizeof(nums[0]);
printf("缺少的那个数是%d\n",missingNumber(nums,sz));
return 0;
}
缺少的那个数是7
异或法
#include <stdio.h>
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;
}
int main()
{
int nums[]= {0,1,2,3,4,5,6,8,9,10};
int sz = sizeof(nums)/sizeof(nums[0]);
printf("缺少的那个数是%d\n",missingNumber(nums,sz));
return 0;
}
缺少的那个数是7