找出出現次數最多的幾個數值

2021-06-22 12:05:44 字數 935 閱讀 8646

這道題目所說的出現最多的幾個數值,其實是帶有附加條件的:

這幾個數值中出現次數最少的那個數,要比除這幾個值外的其他數的總個數要多。(說的自己都有點暈-_-!)

這樣才能在最後結果中,呈現這幾個數。所以必須按照資料來源中的統計量分析出求前幾位的數值。

其**如下:

#include #include using namespace std;

void find(int data, int length, hash_map& hmap,int id_count)

else //沒找到,進行抵消

else //進行抵消

}if (hmap[min_index] == 1)

else}}

}}int main()

; int data = ;

int id_count = 3;

hash_maphmap;

find(data, sizeof(data) / sizeof(int), hmap, id_count);

hash_map::iterator it_end = hmap.end();

for (hash_map::iterator it = hmap.begin();

it != it_end; it++)

return 0;

}

此程式時間複雜度為o(n),並用到了hash_map,為了能快速查詢,這在較多資料時,效能提公升比較明顯。hash需要初始化桶的個數,因為hash的記憶體平均使用率為50%,再加上當超出hash範圍時,需要平方重新分配空間,在工程中如不初始化桶的個數,程式經常會崩掉。

但windows中的hash_map並不需要初始化,由系統自行管理,這個有點詭異。

相對於本文的類似題目有:

找出陣列中超過半數的數、超過1/3的兩個最大數等等……

找出出現次數最多的字母

找出出現次數最多的字母 description 找出出現次數最多的字母input現在給你一行密文,全部由小寫字母組成 不超過100個 你要找出出現次數最多的那個字母 output 每組輸出1行,輸出出現次數最多的那個字母 sample input aaaaaaabbc nnnnnnnasnnnnas...

在1000個數中找出出現次數最多的數

package com.fonxian.findmax 問題 在乙個由自然數1 1000中某些數字所組成的陣列中,每個數字可能出現零次或者多次。設計乙個演算法,找出出現次數最多的數字。public class findmax 找到出現次數最多的數 for int t 0 t 1000 t retur...

從一億個ip找出出現次數最多的IP 分治法

1,hash雜湊 2,找到每個塊出現次數最多的 預設出現均勻 可以用字典樹 3,在每個塊出現最多的資料中挑選出最大的為結果 問題一 怎麼在海量資料中找出重複次數最多的乙個 演算法思想 方案1 先做hash,然後求模對映為小檔案,求出每個小檔案中重複次數最多的乙個,並記錄重複次數。然後找出上一步求出的...