判断重复数据算法改进

在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。

你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。

输入格式:

你的程序首先会读到一个正整数n,n[1,100000],然后是n个整数。

输出格式:

如果这些整数中存在重复的,就输出:

YES
 

否则,就输出:

NO
 

输入样例:

5
1 2 3 1 4

输出样例:

YES

我们首先想到的是抓取一个数,然后在数组中查找是否有重复的数据,也就是用二次循环。
数据较小时,可以用二重循环来实现,但当数据达到10000时,就要循环10000*10000次时间就多了很多,效率很低。

所以需要改进算法,减少循环次数


1、每输入一个数就在此前输入的数据中查找,若找到重复的直接结束程序

#include <stdio.h>

int main()
{
int n,t=1,p=1;
int a[100000];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
for(int k=i-1;k>=0;k--){
if(a[i]==a[k]){  //查找a[i]之前是否重复
printf("YES");
return 0;  //只要有一个重复直接结束程序,减少运行时间
}
}
}
printf("NO");

return 0;
}

 

2、定义一个数组储存单个数字出现的个数,当元素的值大于一,说明出现重复

#include <stdio.h>

int main()
{
int n,x,p=1;
int a[100000]={0};
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x);
a[x]++; //x对应的数组元素加一
if(a[x]>1){ //如果大于一,说明重复出现
p=0;
printf("YES");
break; //终止循环
}
}
if(p)
printf("NO");

return 0;
}

 

 
 
posted @ 2021-10-31 10:11  刘芷萱  阅读(660)  评论(0编辑  收藏  举报