FOJ 1705 众数问题
程序员文章站
2022-03-13 16:47:05
...
一,问题描述
二,问题分析
该问题最直接的方法,就是用数组记录出现的次数,每出现一次对应的下标就增加一次,但是集合中元素的值可以是负数,所以用数组记录会比较麻烦。这个时候我们考虑map数据结构,map中元素是键值对即 <键,值>,键就可以相当于集合元素值,值相当于集合元素出现的次数。记录完毕后再遍历整个map容器找出值最大的元素即可。
三,问题解答
#include<iostream>
#include<map>
using namespace std;
int main() {
int n; //集合个数
map<int, int> maps;
while (cin >> n) {
int num;
int key = 0, value = 0; //key为键值,对应的是众数,value是值,对应的是重数
while (n--) {
cin >> num;
if (maps.find(num) == maps.end()) { //如果maps中不存在key = num
maps[num] = 1;
}
else { //若存在则值加一
maps[num]++;
}
}
for (map<int, int>::iterator it = maps.begin(); it != maps.end(); it++) {
if (value < it->second) {
value = it->second;
key = it->first;
}
}
cout << key << " " << value << endl;
maps.clear(); //及时清理map,否则数据会一直保留,影响接下来的测试用例
key = 0;
value = 0;
}
}
四, map相关操作