分治演算法-眾數問題

HowieLee59發表於2019-03-20

Problem Description

給定含有n個元素的多重集合S,每個元素在S中出現的次數稱為該元素的重數。多重集S中重數最大的元素稱為眾數。例如,S={1,2,2,2,3,5}。多重集S的眾數是2,其重數為3。對於給定的由n 個自然陣列成的多重集S,計算S的眾數及其重數。如果出現多個眾數,請輸出最小的那個。

Input

輸入資料的第1行是多重集S中元素個數n(n<1300000);接下來的n行中,每行有一個最多含有5位數字的自然數,。

Output

輸出資料的第1行給出眾數,第2行是重數。

Sample Input

6
1
2
2
2
3
5

Sample Output

2
3
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(){
    int a;
    scanf("%d",&a);
    int arr[a];
    int num[65536] = {0};
    for(int i = 0 ; i < a ; i++){
        scanf("%d",&arr[i]);
        num[arr[i]]++;
    }
    int max = 0;
    int flag = 0;
    for(int i = 65535 ; i >= 0 ; i--){
        if(num[i] >= max){
            max = num[i];
            flag = i;
        }
    }
    printf("%d\n%d",flag,max);
    return 0;
}

 

相關文章