问题描述:
试题编号: | 201312-1 |
试题名称: | 出现次数最多的数 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。 输出格式 输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。 样例输入 6 样例输出 10 |
1、最普通的思路,注意数组a的大小为10000+5
#include<iostream>
#include<string.h>
#define MAXN 10005
using namespace std;
int a[MAXN];
int main() {
int n,val;
cin>>n;
memset(a,0,sizeof(a));//初始化
while(n--) {
cin>>val;
a[val]++;
}
//找出出现次数最多的
int answer=1;
for(int i=2;i<=10000;i++) {
if(a[answer]<a[i]) {
answer=i;
}
}
cout<<answer<<endl;
return 0;
}
2、使用STL容器中的map,参考:https://blog.csdn.net/tigerisland45/article/details/54696040
关于map的用法:https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html
map的功能:
自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
根据key值快速查找记录,查找的复杂度基本是Log(N)。
快速插入Key -Value 记录。
快速删除记录。
根据Key 修改value记录。
遍历所有记录。
头文件:#include<map>
#include<iostream>
#include<map>
using namespace std;
int main() {
int n,val;
cin>>n;
map<int,int> m;
while(n--) {
cin>>val;
m[val]++;
}
int answer,max=0;
for(map<int,int>::iterator it=m.begin();it!=m.end();it++) {
if(max<it->second) {
max=it->second;
answer=it->first;
}
}
cout<<answer<<endl;
return 0;
}