数据结构实验:哈希表
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
在n个数中,找出出现次数最多那个数字,并且输出出现的次数。如果有多个结果,输出数字最小的那一个。
Input
单组数据,第一行数字n(1<=n<=100000)。
接下来有n个数字,每个数字不超过100000000
Output
出现次数最多的数字和次数。
Sample Input
3
1 1 2
Sample Output
1 2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[100001];
int b[100001];
int main()
{
int n,m,i,j,maxs=0,max=0;
memset(a,-1,sizeof(a));
memset(b,0,sizeof(b));
scanf("%d",&n);
m=n+1;
for(i=0; i<n; i++) //输入n个数
{
int q;
int w;
scanf("%d",&q);
w=q%m; //保留余数法
for(j=0; j<n; j++) //如果不符合下面俩条件,说明这个位置被占用,j++,进行下一个位置的判断
{
if(a[w]==-1)
{
a[w]=q;
b[w]++;
if(maxs<b[w])
{
maxs=b[w];
max=a[w];
}
else if(maxs==b[w])
{
if(a[w]<max)
{
max=a[w];
}
}
break;
}
else if(a[w]==q)
{
b[w]++;
if(maxs<b[w])
{
maxs=b[w];
max=a[w];
}
else if(maxs==b[w])
{
if(a[w]<max)
{
max=a[w];
}
}
break;
}
}
}
printf("%d %d\n",max,maxs);
return 0;
}