题目:数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
题目链接:
https://leetcode.cn/problems/missing-number-lcci/https://leetcode.cn/problems/missing-number-lcci/解法一:先从0到n把所有的数加起来,遍历数组减去数组中的元素,就可以找到缺失的数
int missingNumber(int* nums, int numsSize){
int sum=0;
for(int i=0; i < numsSize+1; i++)
{
sum+=i;
}
for(int i=0; i < numsSize; i++)
{
sum-=nums[i];
}
return sum;
}
解法二:新建一个变量x,先遍历一下数组与数组中的元素异或,就可以找到缺失的数,再让x与0到n之间的数异或。原理:任何一个数与0异或两次得到的都是他本身0,异或一次得到与它异或一次的元素。
int missingNumber(int* nums, int numsSize){
int x = 0;
for(int i=0;i < numsSize; ++i)
{
x ^= nums[i];
}
for(int i=0;i < numsSize+1; ++i)
{
x ^= i;
}
return x;
}