1. 程式人生 > >CCF201312-1 出現次數最多的數

CCF201312-1 出現次數最多的數

問題描述:

試題編號: 201312-1
試題名稱: 出現次數最多的數
時間限制: 1.0s
記憶體限制: 256.0MB
問題描述:

問題描述

  給定n個正整數,找出它們中出現次數最多的數。如果這樣的數有多個,請輸出其中最小的一個。

輸入格式

  輸入的第一行只有一個正整數n(1 ≤ n ≤ 1000),表示數字的個數。
  輸入的第二行有n個整數s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相鄰的數用空格分隔。

輸出格式

  輸出這n個次數中出現次數最多的數。如果這樣的數有多個,輸出其中最小的一個。

樣例輸入

6
10 1 10 20 30 20

樣例輸出

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;
}