天天看点

25-重复出现的数字(map)问题描述:代码解析:

问题描述:

给定 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;
}