Description
在n个数中,找出出现次数最多那个数字,并且输出出现的次数。如果有多个结果,输出数字最小的那一个。
Input
单组数据,第一行数字n(1<=n<=100000)。
接下来有n个数字,每个数字不超过100000000
Output
出现次数最多的数字和次数。
Sample
Input
3
1 1 2
Output
1 2
答案:
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
const int N = 1e5 + 10;
using namespace std;
int mp[N]; //存数字
int vis[N]; //存次数
int main()
{
ios::sync_with_stdio(0);
int n;
cin>>n;
int m=n+1;
memset(mp,-1,sizeof(mp));
int i;
int maxn=-1;
int maxnpos;
for(i=0; i<n; i++)
{
int k;
cin>>k;
for(int j=0;; j++)
{
int pos=(k+j)%m; //除留余数法
if(mp[pos]==-1)
{
mp[pos]=k;
vis[pos]++;
if(maxn<vis[pos])
{
maxn=vis[pos];
maxnpos=mp[pos];
}
else if(maxn==vis[pos]&&maxnpos>mp[pos])
{
maxnpos=mp[pos];
}
break;
}
else if(mp[pos]==k)
{
vis[pos]++;
if(maxn<vis[pos])
{
maxn=vis[pos];
maxnpos=mp[pos];
}
else if(maxn==vis[pos]&&maxnpos>mp[pos])
{
maxnpos=mp[pos];
}
break;
}
}
}
cout<<maxnpos<<" "<<maxn<<endl;
return 0;
}