取出現次數最多的K個數

2021-07-05 05:46:46 字數 1082 閱讀 8471

搜尋引擎會通過日誌檔案把使用者每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255位元組。

假設目前有一千萬個記錄(這些查詢串的重複度比較高,雖然總數是1千萬,但如果除去重複後,不超過3百萬個。乙個查詢串的重複度越高,說明查詢它的使用者越多,也就是越熱門。),請你統計最熱門的10個查詢串,要求使用的記憶體不能超過1g。

第一步:用hashmap(stl中叫unordered_map)統計詞頻

第二步:用容量為k的最小堆取出出現次數最大的k個詞

(參考

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef pair record;

struct recordcomparer

};vector

topknumbers(vector

&input, int k)

for (; iter != stat.end(); iter++)

}vector

result;

while (!heap.empty())

return result;

}/******** 測試** *********/

int main()

auto result = topknumbers(test, 5);

for (auto it = result.rbegin(); it != result.rend(); it++)

printf("*************************===\n");

sort(test.begin(), test.end());

for (const

string &s : test)

}

出現次數最多的整數

問題描述 編寫乙個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數n也是由使用者輸入的,最多不會超過20。然後程式將對這個陣列進行統計,把出現次數最多的那個陣列元素值列印出來。如果有兩個元素值出現的次數相同,即並列第一,那麼只列印比較小的那個值。輸入格式 第一行是乙個整數n,n 2...

出現次數最多的整數

問題描述 編寫乙個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數n也是由使用者輸入的,最多不會超過20。然後程式將對這個陣列進行統計,把出現次數最多的那個陣列元素值列印出來。如果有兩個元素值出現的次數相同,即並列第一,那麼只列印比較小的那個值。輸入格式 第一行是乙個整數n,n 2...

出現次數最多的數

出現次數最多的數 問題描述 給定n個正整數,找出它們中出現次數最多的數。如果這樣的數有多個,請輸出其中最小的乙個。輸入格式 輸入的第一行只有乙個正整數n 1 n 1000 表示數字的個數。輸入的第二行有n個整數s1,s2,sn 1 si 10000,1 i n 相鄰的數用空格分隔。輸出格式 輸出這n...