数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
示例 1:
输入:[3,0,1]
输出:2
示例 2:
输入:[9,6,4,2,3,5,7,0,1]
输出:8
解答思路:使用异或思想解题。
c
int missingNumber(int* nums, int numsSize)
{
int sum = 0;
for (int i=0;i<numsSize;i++)
{
sum ^= i;//每个i与0异或,i为0 ~ numsSize-1 (因为这里,最大的数是numsSize-1,没有异或numsSize,所以最后返回值的时候还需要异或一个numsSize)
sum ^= nums[i];//数组中每个值与0 ~ numsSize-1异或。共numsSize个数
//数组中的值为0 ~ numsSize,但是其中少一个值,共numsSize个数。
//
}
return sum^numsSize;
}