# Array# Frequency Counting# Greedy

b374 - [福州19中]众数

🔗 前往 ZeroJudge 原題

題目描述

題目要求找出給定數列中出現次數最多的數(眾數)及其出現次數。輸入包含一個正整數 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;
			}
		}
	}
	
}

Discussion