最新百度面試題目一

2021-09-08 02:09:52 字數 1277 閱讀 9305

現在有1千萬個隨機數,隨機數的範圍在1到1億之間。現在要求寫出一種演算法,將1到1億之間沒有在隨機數中的數求出來。  

解決辦法:

一)用乙個32位的整數32位表示32個數,1億/32 = 3125000,使用3.125 * 4m byte空間即可儲存1億個數,即index[3125000].

二)對於數n,(n-1) / 32 為其在陣列中的下標,table[(n - 1) % 32]與陣列中下標(n-1)/32的值使用或操作。

三)表table中值為   table[ 0 ]=0x00000001,

table[ 1 ]=0x00000002,

table[29]=0x20000000,

table[31]=0x80000000,   等這樣的表示方式,具體的數值使用查表法加快速度。

四)最後算某值是否存在,使用與操作即可計算出。 

資料儲存比如:

第乙個n=30是乙個隨機數,則儲存可以表示為:index[(30-1)/32] = index[0] = index[0] || table[(30-1)%32] /*剛開始時候初始化index[32]=*/

=  0 || 0x20000000 = 0x20000000;

第二個n=31是乙個隨機數,則儲存可以表示為:index[(31-1)/32] = index[0] = index[0] || table[(31-1)%32] /*第30位1,其他位為0*/

=  0x20000000 || 0x40000000 = 0x60000000;

依次類推,即可。 

資料驗證比如:

1. 當要查詢30是否存在的時候,由於:(30-1)/32 = 0;(30-1)%32=29;我們只需要計算:index[0] & table[29] 是真還是假,就可以得出30是否存在。

2. 當要查詢31是否存在的時候,由於:(31-1)/32 = 0;(31-1)%32=30;我們只需要計算:index[0] & table[30] 是真還是假,就可以得出31是否存在。

依次類推,即可。 

小結:

通過分析此題目,首先這種思路和方法,在一定程度上用相對小的空間儲存了大量的資料,節省了比較大的記憶體空間;在運算方面,位運算的速度相當來說效率是比較高的,因而也再一定程度上節省了時間複雜。

總之,這種儲存方式和思維方式,在一定方面能夠有效的解決海量資料儲存與運算。基於此題目,凡是大量資料篩選,判斷是否存在等問題,我們都可以借鑑此題目的思維和方法。

百度最新面試題

16 找出第k大的數字所在的位置。寫一段程式,找出陣列中第k大小的數,輸出數所在的位置。例如中,第一大的數是7,位置在4。第二大 第三大的數都是4,位置在1 3隨便輸出哪乙個均可。答案 先找到第k大的數字,然後再遍歷一遍陣列找到它的位置。所以題目的難點在於如何最高效的找到第k大的數。我們可以通過快速...

2015百度最新面試題

一。乙個大的含有50m個url的記錄,乙個小的含有500個url的記錄,找出兩個記錄裡相同的url。二。微博上,每個使用者可以傳送一條訊息,可以 follow 另乙個使用者,當使用者傳送訊息時,所有 follow 他的使用者都能看見這條訊息。如 a follow b,則 b 的訊息,a 都能看見。實...

百度面試題

有一根27厘公尺的細木桿,在第3厘公尺 7厘公尺 11厘公尺 17厘公尺 23厘公尺這五個位置上各有乙隻螞蟻。木桿很細,不能同時通過乙隻螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會後退。當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘公尺的距...