b374 - [福州19中]众数
題目描述
題目要求找出給定數列中出現次數最多的數(眾數)及其出現次數。輸入包含一個正整數 N,表示數列的長度,接下來 N 個正整數構成數列。輸出眾數和其出現次數,如果有多個眾數,則輸出所有眾數及其出現次數。
解題思路
此題的解題思路是使用頻率計數法。首先,建立一個大小為 30000 的整數陣列 a,用於儲存每個數字的出現次數。然後,讀取輸入的 N 個數字,並將每個數字對應的陣列元素加 1,從而統計每個數字的出現次數。接著,遍歷陣列 a,找出出現次數最多的數字(眾數)及其出現次數。最後,輸出所有眾數及其出現次數。
複雜度分析
- 時間複雜度: O(N + M),其中 N 是輸入數字的個數,M 是數字的範圍 (30000)。
- 空間複雜度: O(M),其中 M 是數字的範圍 (30000)。
程式碼
#include <iostream>
using namespace std;
int main(){
int a[30000];
int b=0,c=0,max=0;
while(cin >> b){
for(int i=0;i<30000;i++){
a[i]=0;
}
for(int i=0;i<b;i++){
cin >> c;
a[c]++;
}
for(int i=0;i<30000;i++){
if(a[i]>max){
max=a[i];
}
}
for(int i=0;i<30000;i++){
if(a[i]==max){
cout << i << " " << max << endl;
}
}
}
}