寒假训练--二分哈希--数据结构实验:哈希表

数据结构实验:哈希表

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

 单组数据,第一行数字n(1<=n<=100000)。
接下来有n个数字,每个数字不超过100000000

输出

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

示例输入

3
1 1 2

示例输出

1 2

提示

 

来源

 cz

示例程序
#include <stdio.h>
#define N 100000
int s[N] , sum[N] ;
int main()
{
    int i , n , tp , a ;
    scanf("%d", &n);
    for(i = 0 ; i < n ; i++)
    {
       scanf("%d", &a);
       tp = a % N ;
       if(tp < 0) tp += N ;
       while(1)
       {
           if(s[tp]==a || s[tp]==0)
           {
               s[tp] = a ; sum[tp]++; break;
           }
           else
           {
               tp++;
               if(tp >= N)
                tp = 0 ;
           }
       }
    }
    int x , p ;
    x = s[0] ; p = sum[0] ;
    for(i = 1 ; i < N ; i++)
    {
        if(p < sum[i] || (p==sum[i] && x > s[i]) )
        {
            p = sum[i] ;
            x = s[i] ;
        }
    }
    printf("%d %d\n", x, p);
}

你可能感兴趣的:(寒假训练--二分哈希--数据结构实验:哈希表)