水題 求眾數 (hash的練習)

喜歡ctrl的cxk發表於2018-12-29

題目描述:

輸入20個數,每個數都在1-10之間,求1-10中的眾數(眾數就是出現次數最多的數,如果存在一樣多次數的眾數,則輸出權值較小的那一個)。

輸入描述:

測試資料有多組,每組輸入20個1-10之間的數。

輸出描述:

對於每組輸入,請輸出1-10中的眾數。

輸入樣例:

5 1 5 10 3 5 3 4 8 6 8 3 6 5 10 7 10 2 6 2 

輸出樣例:

5

解題思路:

我jio得題目中最關鍵的一句話就是“每個數都在1-10之間”,就憑這句話我就jio得沒有必要用map,直接用一個大小為11的陣列來構造一個雜湊表,用這個hash表來記錄每個數出現的次數。我沒有用sort對這個陣列進行降序排列,而是用ans來記錄眾數的出現次數,for迴圈遍歷hash表,如果某個值等於ans,那麼這個值的所在下標就是眾數。

AC程式碼:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int ans = 0;   //記錄眾數
    int hash[11];   //記錄每個數出現的次數
    memset(hash,0,sizeof(hash));
    for(int i = 0; i < 20; i++)
    {
        int temp;
        cin >> temp;
        hash[temp]++;
        ans = max(ans,hash[temp]);
    }
    for(int i = 1; i <= 10; i++)
    {
        if(hash[i] == ans)
        {
            cout << i << endl;
            break;
        }
    }
    return 0;
}

 

相關文章