消失的数字
题目要求
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
思路
因为数组内元素是0-n的数字,这个与下标刚好是一样的,就可以利用a ^ a = 0和0 ^ a = a这两个公式进行编程,缺少的那个数字只出现了一次,其余数字出现两次。
代码实现
#include <stdio.h>
int FindNum(int str[],int len)
{
int s = 0;
for (int i = 0; i < len; i++)
{
s ^= i;
s ^= str[i];
}
s ^= len;
return s;
}
int main()
{
int str[] = { 1, 9, 8, 7, 6, 4, 3, 2, 10 , 0};
printf("%d", FindNum(&str, sizeof(str) / sizeof(int)));
return 0;
}