Description
众所周知ly学姐非常漂亮,所以追她的男生也就非常多。
然后,ly学姐就收到了很多情书,多封情书有可能是同一个男生所写。
这让ly学姐很苦恼,她想知道给她写的情书最多的男生是谁,你们能帮帮她么?
给你n个情书上落款的姓名,统计出出现次数最多的姓名,如果出现次数相同的则按字典序输出最小的。
Input
第一行输入一个正整数n
后面n + 1行表示落款的姓名,为字符串
n >= 0, n <= 1e5
Output
输出一行 出现次数最多的姓名
Sample Input 1
3 xiaoming xiaogang xiaoming
Sample Output 1
xiaoming
Sample Input 2
2 ab cd
Sample Output 2
ab
解析:第一次循环用map存一下每个名字出现的次数,并记录下最多次数。第二次循环找出字典序最小的名字。
代码O( nlog(n) ):
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+50;
int n;
string str[MAXN];
string ans="#";
map<string,int>p;
int main()
{
cin>>n;
int res=0,tmp;
for(int i=1;i<=n;i++)
{
cin>>str[i];
p[str[i]]++;
tmp=p[str[i]];
if(tmp>res) res=tmp;
}
for(int i=1;i<=n;i++)
{
if(res==p[str[i]])
{
if(ans=="#") ans=str[i];
else if(ans>str[i]) ans=str[i];
}
}
if(n!=0)
cout<<ans<<endl;
return 0;
}