FOJ-1001-Duplicate Pair

题目: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\n", j);  
                 }  
         }  
         return 0;  
} 

思路分析:
既然你输入n个数,我就开个n大小的字符数组,数组中所有元素置0,(为省时用memset,所以这里定义的是字符数组,调用#include<string.h>)你输入的每一个数比如说j对应的字符数组的成员是a[j]a[j]代表的就是你的状态,输入j以后如果之前没有和j相同的数(也就是a[j]==0),将其值置为1,代表这个数出现了;如果这个数之前出现了(a[j]==1),就得到我们要的数了。

posted @ 2016-03-21 16:54  Wasdns  阅读(224)  评论(0编辑  收藏  举报