CCF201312-1 出現次數最多的數
阿新 • • 發佈:2018-10-31
問題描述:
試題編號: | 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;
}