1,把整數分成256m段,每段可以用64位整數儲存該段資料個數,256m*8 = 2g記憶體,先清0
2,讀10g整數,把整數對映到256m段中,增加相應段的記數
3,掃瞄256m段的記數,找到中位數的段和中位數的段前面所有段的記數,可以把其他段的記憶體釋放
4,因中位數段的可能整數取值已經比較小(如果是32bit整數,當然如果是64bit整數的話,可以再次分段),對每個整數做乙個記數,再讀一次10g整數,只讀取中位數段對應的整數,並設定記數。
5,對新的記數掃瞄一次,即可找到中位數。
如果是32bit整數,讀10g整數2次,掃瞄256m記數一次,後一次記數因數量很小,可以忽略不記。
解釋一下:假設是32bit整數,按無符號整數處理
整數分成256m段? 整數範圍是0 - 2^32 - 1 一共有4g種取值,4g/256m = 16,每16個數算一段 0-15是1段,16-31是一段,...
整數對映到256m段中? 如果整數是0-15,則增加第一段記數,如果整數是16-31,則增加第二段記數,...
其實可以不用分256m段,可以分的段數少一些,這樣在掃瞄記數段時會快一些,還能節省一些記憶體。
騰訊後台筆試題解壓
小q想要給他的朋友傳送乙個神秘字串,但是他發現字串的過於長了,於是小q發明了一種壓縮演算法對字串中重複的部分進行了壓縮,對於字串中連續的m個相同字串s將會壓縮為m s,例如字串abcabcabc將會被壓縮為 3 abc 現在小q的同學收到了小q傳送過來的字串,你能幫助他進行解壓縮麼?輸入描述 輸入第...
騰訊筆試題
一.單選題 每題4 分,15題,共60分 1.考慮函式原型void hello int a,int b 7,char pszc 下面的函式呼叫鐘,屬於不合法呼叫的是 a hello 5 b.hello 5,8 c.hello 6,d.hello 0,0,2.下面有關過載函式的說法中正確的是 a.過載...
騰訊筆試題
1 請定義乙個巨集,比較兩個數a b的大小,不能使用大於 小於 if語句 2 如何輸出原始檔的標題和目前執行行的行數 3 兩個數相乘,小數點後位數沒有限制,請寫乙個高精度演算法 4 寫乙個病毒 5 有a b c d 四個人,要在夜裡過一座橋。他們通過這座橋分別需要耗時1 2 5 10分鐘,只有一支手...