题目:Duplicate Pair
大意:
有多组测试数据,输入整数n,接着输入n个整数(integers),这些数字几乎都只出现一次,但其中有一个数出现了两次,请输出这个数。
题解:
大数据问题,普通的两个for暴力解决很明显会T,也不能用C++的cin和cout(费时太多)。那么这个问题就转换成如何省时间的一题。
代码:
#include <stdio.h>
#include <string.h>
#define N 1000010
char a[N]; //定义字符数组,用到memset,节省时间
int main(void)
{
int n;
int i;
int j;
while(scanf("%d", &n) != EOF)
{
memset(a, 0, n);
for(i = 0; i < n; i++)
{
scanf("%d", &j);
if(a[j] == 0) a[j] = 1;
else printf("%d
", j);
}
}
return 0;
}
思路分析:
既然你输入n个数,我就开个n大小的字符数组,数组中所有元素置0,(为省时用memset,所以这里定义的是字符数组,调用#include<string.h>
)你输入的每一个数比如说j对应的字符数组的成员是a[j]
,a[j]
代表的就是你的状态,输入j以后如果之前没有和j相同的数(也就是a[j]==0
),将其值置为1,代表这个数出现了;如果这个数之前出现了(a[j]==1
),就得到我们要的数了。