您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验:哈希表

2017-08-02 17:03 162 查看

数据结构实验:哈希表

Time Limit: 1000MS Memory Limit: 65536KB

Submit Statistic

Problem Description

在n个数中,找出出现次数最多那个数字,并且输出出现的次数。如果有多个结果,输出数字最小的那一个。

Input

单组数据,第一行数字n(1<=n<=100000)。

接下来有n个数字,每个数字不超过100000000

Output

出现次数最多的数字和次数。

Example Input

3

1 1 2

Example Output

1 2

Hint

Author

cz

居然没超时………

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 100000000
int a[MAXN];
int main()
{
int n, b;
scanf("%d", &n);
memset(a, 0, sizeof(a));
for(int i=0;i<n;i++)
{
scanf("%d", &b);
a[b]++;
}
int point = 0;
int max = 0;
for(int i=0;i<MAXN;i++)
{
if(a[i]>max)
{
max = a[i];
point = i;
}
}
printf("%d %d\n", point ,max);
return 0;
}


哈希代码:

#include<stdio.h>
#include<string.h>

struct m
{
int data;
int tim;
struct m * next;
} a[100001];

int addm(int n,int d)
{
m *p = &a
,*t;
t = p;
while (p != NULL)
{
if (p->data == d)
{
p->tim++;
return 0;
}
p = p->next;
if (t->next != NULL)
t = t->next;
}
p = t;
p->next = new m;
p = p->next;
p->data = d;
p->tim = 1;
p->next = NULL;
return 0;
}
int imax;
int fid (void)
{
int t = 0,n = 0,i;
m *p;
for (i = 0; i < 100000; i++)
{
p = &a[i];
while (p != NULL)
{
if (p->tim > t)
{
t = p->tim;
n = p->data;
}else if (p->tim == t)
{
if (p->data < n)
{
n = p->data;
}
}
p = p->next;
}
}
imax = n;
return t;
}

int main()
{
int n,i,m,t;
memset(a,0,sizeof (a));
scanf ("%d",&n);

for (i = 0; i < n; i++)
{
scanf ("%d",&t);
addm(t % 100000,t);
}
int num = fid();
printf ("%d %d\n",imax,num);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 哈希