数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。时间复杂度O(n)

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。时间复杂度O(n)

由于时间复杂度要求为O(n),采取异或的做法。
举例说明:

数组{1,0,3},缺失数字是2.
用二级制的方法表示出这几个数字,这里只看后4位置即可:
1:0001
0:0000
3:0011
定义0-n的数字组成一个数组num
两个相同的数字异或为0(不需要考虑顺序),那么nums数组所有的数和num数组所有数异或之后,相同的约掉,剩下的数字就是我们要找的数。
代码如下:

#include<stdio.h>
int missingNumber(int* nums, int numsSize) 
{
    
    
	int i = 0;//nums中的下标位置
	int res = numsSize;//不能是0,否则多按位异或一次0
	for (i = 0; i < numsSize; i++)
	{
    
    
		res = res ^i ^ nums[i];
	}
	return res;
}
int main()
{
    
    
	int num[] = {
    
    5,4,3,1,2,6,7,9,0};
	int n = 0;
	n = sizeof(num) / sizeof(num[0]);//求numsSize
	int p = missingNumber(num, n);
	printf("缺失的数字是:%d\n", p);
	return 0;
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kris_paul/article/details/111938402