蒜头君面试 - 计蒜客

蒜头君来蒜厂面试的时候,曾经遇到这样一个面试题:

给定 n n n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一个。当时可算是给蒜头君难住了。现在蒜头君来考考你。

输入格式

第一行输入一个整数 n ( 1 ≤ n ≤ 100000 ) n(1 \le n \le 100000) n(1n100000),接下来一行输入 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;
}

你可能感兴趣的:(计蒜客练习)