回憶一下tx的二面,有一道題是這樣的:
假設有1kw個身份證號,以及他們對應的資料。身份證號可能重複,要求找出出現次數最多的身份證號。
乙個很顯然的做法是,hash之,o(n)搞定。這前提是記憶體中可以存下。
如果是中國的13億人口,記憶體中存不下呢?借用磁碟,多次掃瞄?磁碟io的速度慢得能讓你瘋掉。
這時候你終於感受到,中國人口真***多阿。。。
--然後再看看今天的astar複賽第一題:
百 度每天都會接受數億的查詢請求, 如何在這麼多的查詢(query)中找出高頻的query是乙個不小的挑戰. 而你的任務則更加艱鉅, 你需要在極其有限的資源下來找出這些高頻的query.(使用記憶體不得多於1mb) 。輸入檔案是一行乙個query, 以檔案結束符結尾。每個query位元組數l(乙個漢字兩個位元組)滿足:0引用
輸出你認為最高頻的100個query
# include
# include
# include
# include
# include
using
namespace std;
const
int hashm = 103;
inline
int hash(
char *p)
return ((t & 0x7fffffff) % hashm); }
struct node_t };
struct great_node_t
great_node_t(
const
char *_s,
int &_count) };
node_t tbl[hashm][100];
int tblc[hashm];
vectorans;
int main()
while (
scanf ("%s", t) == 1)
if (tbl[v][i].count < tbl[v][j].count) }
if (i == tblc[v])
else }
}for (i = 0; i < hashm; ++i) }
sort(ans.begin(), ans.end());
for (
int i = 0; i < 100 && i < (
int )ans.size(); ++i)
return 0; }
//資料生成** #
找出出現次數最多的字母
找出出現次數最多的字母 description 找出出現次數最多的字母input現在給你一行密文,全部由小寫字母組成 不超過100個 你要找出出現次數最多的那個字母 output 每組輸出1行,輸出出現次數最多的那個字母 sample input aaaaaaabbc nnnnnnnasnnnnas...
出現次數最多的整數
問題描述 編寫乙個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數n也是由使用者輸入的,最多不會超過20。然後程式將對這個陣列進行統計,把出現次數最多的那個陣列元素值列印出來。如果有兩個元素值出現的次數相同,即並列第一,那麼只列印比較小的那個值。輸入格式 第一行是乙個整數n,n 2...
出現次數最多的整數
問題描述 編寫乙個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數n也是由使用者輸入的,最多不會超過20。然後程式將對這個陣列進行統計,把出現次數最多的那個陣列元素值列印出來。如果有兩個元素值出現的次數相同,即並列第一,那麼只列印比較小的那個值。輸入格式 第一行是乙個整數n,n 2...