SDUT J - 数据结构实验:哈希表(1.哈希 2.map+桶排序(数据量弱,可以卡过去))

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

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

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

Sample

Input

3
1 1 2

Output

1 2

1.哈希

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a[100010],b[100010]= {0};
    int n,maxx=0,sum=0;
    cin>>n;
    int m=n+1;
    for(int i=0; i<n; i++)
    {
        int x;
        cin>>x;
        for(int j=1; j<=n; j++)
        {
            int d=(j+x)%m;
            if(a[d]==0)
            {
                a[d]=x;
                b[d]++;
                if(sum<b[d])
                {
                    sum=b[d];
                    maxx=x;
                }
                else if(sum==b[d]&&maxx>x)
                {
                    sum=b[d];
                    maxx=x;
                }
                break;
            }
            else if(a[d]==x)
            {
                b[d]++;
                if(sum<b[d])
                {
                    sum=b[d];
                    maxx=x;
                }
                else if(sum==b[d]&&maxx>x)
                {
                    sum=b[d];
                    maxx=x;
                }
                break;

            }
        }

    }
    cout<<maxx<<" "<<sum;
    return 0;
}

2.map+桶排序(数据量弱,可以卡过去)

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    map<int,int>a;
    scanf("%d",&n);
    for(int i=0; i<n; i++)
    {
        int x;
        scanf("%d",&x);
        a[x]++;
    }
    int sum=0,cnt;
    for(int i=0; i<1000010; i++)//应该是1e8
    {
        if(a[i]>sum)
        {
            sum=a[i];
            cnt=i;
        }
    }
    cout<<cnt<<" "<<sum;
    return 0;
}
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页