题目描述
数字的模式是指在一堆给定数字中出现次数最多的数值,如5,5,5,3,3,2,6,4,它的模式就是5。现在你的任务,就是从数字中找到它的模式.
输入
第一行为整数N.从第二行开始为N个整数。对于输入的每个数,有( |input_number| <= 2000000 ).
输出
输出这些数字的模式,如果模式个数不为1,选择它们之中较小的。
样例输入复制
10 1 2 3 4 5 6 7 8 9 9
样例输出复制
9
解题代码
本题用unordered_map更方便,具体详细学习可参考学习:STL容器学习
#include <iostream>
#include<unordered_map>
using namespace std;
int main() {
int n;
cin >> n;
//注意点1:不能使用map<int,int>会出现超时问题,map 是基于红黑树实现的,它的查找、插入和删除操作的平均时间复杂度是 O(log n),
//而unordered_map 的平均时间复杂度是 O(1)。
unordered_map<int, int> counts;
int maxCount = 0;
int mode = 0;
for (int i = 0; i < n; ++i) {
int num;
cin >> num;
counts[num]++;
//注意点2:如果模式比较大,或者相同模式但数字比较小;边输入也就变比较了,不用在重新循环一次
if (counts[num] > maxCount || (counts[num] == maxCount && num < mode)) {
maxCount = counts[num];
mode = num;
}
}
cout << mode << endl;
return 0;
}