问题描述
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?:
题目链接:消失的数字
示例
具体思路
思路一
排序,依次查找,如果下一个数不是上一个数+1,那么上一个数+1就是消失的数字。算法的时间复杂度为0(N*logN)
思路二
采用异或的方法,异或的特点是,两个数字进行异或,相同为0不同为1,先将数组中的数字全部异或一遍,再将异或后的结果与0-n中所有的数字异或一遍,最后剩下的那个数字就是消失的数字 。算法的时间复杂度为O(N)
思路三
采用0-N等差数列公式进行计算,减去数组中的值,最后剩下的就是那个消失的数字。算法的时间复杂度为O(N)
代码实现
//思路二
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;
}
//思路3
int missingNumber(int* nums, int numsSize) {
int x = (0 + numsSize)*(numsSize+1)/2;
for(int i = 0; i< numsSize ; i++)
{
x -= nums[i];
}
return x;
}