问题描述:
众数就是一个序列中出现次数最多的数字。 如果不唯一,则输出小的那个值。
样例输入:
第一行给出N(1<=n<=10^5 ),第二行给出N个数字,每个数字在int范围内
输入1:
8
10 3 8 8 3 2 2 2
输出1:
2
输入2:
5
3 3 2 4 2
输出2:
2
思路:
要注意到题目中数字的范围为int之内,所以直接开数组记录出现次数是不可行的,采用map存储
map 会将存入的数值按照 key 从小到大排序,因此要取得最小的众数,依次访问即可
#include <cstdio>
#include <map>
#include <algorithm>
using namespace std;
map<int, int> mp;
int main(){
int n, x;
int maxn = 0;
int maxp;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d", &x);
if(mp.find(x) != mp.end()){ //这个数已经出现过
mp[x]++;
}
else{
mp[x] = 1;
}
}
for(map<int, int>::iterator it = mp.begin(); it != mp.end(); it++){
if(it->second > maxn){ //已经从小到大排好序,取>即可
maxn = it->second; //众数出现的次数
maxp = it->first; //众数的值
}
}
printf("%d", maxp);
}