消失的数字
题目要求:
数组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;
}