消失的数字(要求时间复杂度O(N))

消失的数字

题目要求:

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

题目解析:

在解这一题时,网上有许多不同的解法,例如使用哈希表等等,但是对于该题来说,在不要求空间复杂度的情况下,我们直接使用映射的方法,相对于原数组,我们建立一个理论上包括所有从0~N的数组,并且将其初始化为(N+1),或者其他的在0-N之外的数字(便于区分),之后对原数组进行遍历,将原数组元素的值对应至所创建数组的下标,将其值置0,之后再次对该数组进行遍历,不为0的则为缺失数字,即可满足题目要求功能。
详细代码如下:

#include<stdio.h>
#define N 10//比N多一个

int main()
{
    
    
	int num[N] = {
    
     0, 1, 2, 8, 4, 5, 6, 9, 7, 3 };//理论上0-n元素共n+1数据,但只使用了n个空间
	int num1[N + 1];
	for (int i = 0; i < N + 1; ++i)
	{
    
    
		num1[i] = N + 1;
	}
	for (int i = 0; i < N; ++i)
	{
    
    
		num1[num[i]] = 0;
	}
	for (int i = 0; i < N + 1; ++i)
	{
    
    
		if (num1[i] == N + 1)
		{
    
    
			printf("the number is %d", i);
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/dream_i_success/article/details/110758576
今日推荐