问题描述:
给定 nn 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一个。
输入格式
第一行输入一个整数 n(1 \le n \le 100000)n(1≤n≤100000),接下来一行输入 nn 个 int 范围内的整数。
输出格式
输出出现次数最多的数和出现的次数,中间用一个空格隔开,如果有多个重复出现的数,输出值最大的那个。
样例输入1
5
1 1 2 3 4
样例输出1
1 2
样例输入2
10
9 10 27 4 9 10 3 1 2 6
样例输出2
10 2
代码解析:
#include<iostream>
#include<map>
using namespace std;
int main()
{
int n;//输入个数
cin>>n;
map<int, int> set;//第一个参数表示数字,第二个参数表示次数
//插入和计数
for(int i=0; i<n; i++)//输入
{
int number;
cin>>number;
//如果第一次插入
if(!set.count(number))set.insert(pair<int,int>(number,1));
else set[number]++;
}
//确定最大值
int maxans=0;
for(map<int,int>::iterator it=set.begin(); it!=set.end(); it++)
{
if(it->second>maxans)
{
maxans=it->second;
}
}
//输出
int digit=1;
for(map<int,int>::iterator it=set.begin(); it!=set.end(); it++)
{
if(it->second==maxans)
{
digit=it->first;
for(map<int,int>::iterator it2=set.begin(); it2!=set.end(); it2++)
{
if(it2->second==maxans)
{
if(it->first<it2->first)
{
digit=it2->first;
}
}
}
}
}
cout<<digit<<" "<<maxans<<endl;
return 0;
}