這道題目所說的出現最多的幾個數值,其實是帶有附加條件的:
這幾個數值中出現次數最少的那個數,要比除這幾個值外的其他數的總個數要多。(說的自己都有點暈-_-!)
這樣才能在最後結果中,呈現這幾個數。所以必須按照資料來源中的統計量分析出求前幾位的數值。
其**如下:
#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,然後求模對映為小檔案,求出每個小檔案中重複次數最多的乙個,並記錄重複次數。然後找出上一步求出的...