复杂度要求O(N)
数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
方法一:
1.把从0到n的所有整数加在一起结果是sum1
2.把数组中的所有元素相加在一起结果是sum2
3.最后用sum1 - sum2其结果就是缺失的那个数字
方法二:
1.异或:异或是相同是0,不同为1。两个相同的数异或得零,任何数与0异或0^n = n。
2.先将0 - N个数进行异或得到一个ret,然后再将ret与所给数组中的每个数字进行异或,最后所得的数字就是我们所求的数字。
int missingNumber(int* nums, int numsSize)
{
int i = 0;
int ret = 0;
//5 3 1 2 0
//把数组中的元素全部异或在一起,存到ret中
//全部异或,就是5^3^1^2^0,当然0不用考虑
for (i = 0; i < numsSize; i++)
{
ret ^= nums[i];
}
//5^3^1^2^5^4^3^2^1^0 = 4,因为相同的数字异或得到0,而0与任何数异或是其本身
//用ret异或从0到n的所有整数
for (i = 0; i <= numsSize; i++)
{
ret ^= i;
}
return ret;
}