蒜头君来蒜厂面试的时候,曾经遇到这样一个面试题:
给定 n n n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一个。当时可算是给蒜头君难住了。现在蒜头君来考考你。
输入格式
第一行输入一个整数 n ( 1 ≤ n ≤ 100000 ) n(1 \le n \le 100000) n(1≤n≤100000),接下来一行输入 n n n 个 int 范围内的整数。
输出格式
输出出现次数最多的数和出现的次数,中间用一个空格隔开,如果有多个重复出现的数,输出值最大的那个。
样例输入
5
1 1 2 3 4
样例输出
1 2
样例输入
10
9 10 27 4 9 10 3 1 2 6
样例输出
10 2
解:
代码:
#include"iostream"
#include"map"
#include"algorithm"
using namespace std;
int main()
{
//前者为出现数,后者是出现次数
map<int,int>a;
int n,temp,n2;
cin>>n;
for(int i=0;i<n;i++){
cin>>temp;
if(a.count(temp)){
n2=a[temp];
a.erase(temp);
a[temp]=++n2;
}
else a[temp]=1;
}
int max_first=0,max_second=0;
for(map<int,int>::iterator it=a.begin();it!=a.end();it++)
if(it->second>=max_second&&it->first>=max_first){
max_second=it->second;
max_first=it->first;
}
cout<<max_first<<" "<<max_second<<endl;
return 0;
}