警告警告!!!利用map统计时,如果有多个最高频数字,返回的是最小key的最高频数字,不是最先出现的!!!
#include<bits/stdc++.h>
using namespace std;
int main(){
map<int,int> myMap;
int A[20] = {0};
int n;
scanf("%d", &n);
//数组数据输入
for(int i = 0; i < n; i++){
//cin >> A[i];
scanf("%d",&A[i]);
}
//map数据传入
for(int i = 0; i < n; i++){
if(myMap.find(A[i])==myMap.end()){
myMap[A[i]] = 1;
}
else{
myMap[A[i]] += 1;
}
}
//注意:map如果多个高频,返回最小key,并不是第一次出现的
//方案:首先,用数组保存map中出现最多次的多个数字,然后去找nums在A[]中的出场顺序
//查找最大频率数字key
int key,max_n;
key=myMap.begin()->first,max_n=myMap.begin()->second;
for(auto &it : myMap){
if(it.second > max_n){max_n = it.second;key = it.first;}
}
//cout << key << endl;
//cout << max_n << endl;
//找出最高频的全部数字
int B[20] = {0};
int index = 0;
for(auto &it : myMap){
if(it.second == max_n){B[index++] = it.first;}
}
//如果只有一个高频词
if(index == 1){
cout << key << endl;
}
else{
int max_num = 0;
//高频词输出测试
// for(int i = 0; i < index; i++){
// cout << "i = " << i << " B[i] = " << B[i] << endl;
// }
//找出第一个高频词
//通过遍历B最高频数字,和A记录数组,返回第一个出现的最高频数字
bool flag = false;
for(int i = 0; i < n; i++){
for(int j = 0; j < index; j++){
if(A[i] == B[j]){
max_num = A[i];
flag = true;
break;
}
}
if(flag){break;}
}
//输出结果
cout << max_num << endl;
}
return 0;
}