众数问题

来源:互联网 发布:无忧推广软件骗局 编辑:程序博客网 时间:2024/06/09 15:25

1204: 众数问题

描述

题目描述:

问题描述: 
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。 
例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。 
编程任务: 
对于给定的由n 个自然数组成的多重集S,编程计算S 的众数及其重数。

输入:

第1行多重集S中元素个数n(n<=50000);接下来的n 行中,每行有一个自然数。

输出:

输出文件有2 行,第1 行给出众数,第2 行是重数。(如果有多个众数,只输出最小的)

样例输入
6
1
2
2
2
3
5
样例输出
2
3
思路:开始还是无脑想的是双循环然后一个个找,但是太麻烦了,总感觉自己不动脑子,以后做题也是,一定要优化多最好的方案。
其实这里直接用map就可以了,顺便复习一下map的知识,
输入一个数存入map,对应的key加1,然后最后遍历一遍map就可以了,找到最大的key值,
题种还说如果个数相同按数字小的输出,这里map是自动排序的,虽然不稳定,但是这里没有关系,随着插入的int,它会自动排序,如果key值相同的
时候也是按小的取的,所以这里就不用做特殊处理了。
贴代码
#include<bits/stdc++.h>using namespace std;int main(){int n;cin>>n;map<int,int> m;map<int,int>::iterator iter;for(int i = 1;i <= n;i ++){int tmp;cin>>tmp;m[tmp]++; }int maxn,flag;flag = 0;for(iter = m.begin();iter != m.end();iter ++){if(iter->second > flag ){maxn = iter->first;flag = iter->second;}}cout<<maxn<<endl<<flag;return 0;}