数据结构实验:哈希表
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
在n个数中,找出出现次数最多那个数字,并且输出出现的次数。如果有多个结果,输出数字最小的那一个。
Input
单组数据,第一行数字n(1<=n<=100000)。
接下来有n个数字,每个数字不超过100000000
接下来有n个数字,每个数字不超过100000000
Output
出现次数最多的数字和次数。
Example Input
3 1 1 2
Example Output
1 2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//哈希表,除留余数法,
int a[100001]; //存数字
int b[100001]; //存对应数字的次数
int main()
{
int n,m,j,i,x,y,maxdata=0,maxsum=0;
scanf("%d",&n);
m=n+1;
memset(a,-1,sizeof(a));
memset(b,0,sizeof(b));
for(i=0; i<n; i++)
{
scanf("%d",&x);
for(j=0;; j++)
{
y=(x+j)%m; //除留余数法
if(a[y]== -1)
{
a[y]=x;
b[y]++;
if(maxsum < b[y])
{
maxsum = b[y];
maxdata = a[y];
}
else if(maxsum == b[y] && maxdata > a[y])
{
maxdata=a[y];
}
break;
}
else if(a[y]==x)
{
b[y]++;
if(maxsum < b[y])
{
maxsum = b[y];
maxdata = a[y];
}
else if(maxsum == b[y] && maxdata > a[y])
{
maxdata=a[y];
}
break;
}
}
}
printf("%d %d\n",maxdata,maxsum);
return 0;
}