百度面試題

2021-05-23 16:11:19 字數 766 閱讀 5024

1.乙個int陣列,裡面資料無任何限制,要求求出所有這樣的數a[i],其左邊的數都小於等於它,右邊的數都大於等於它。能否只用乙個額外陣列和少量其它空間實現。

2.乙個檔案,內含一千萬行字串,每個字串在1k以內,要求找出所有相反的串對,如abc和cba。

當時怎麼想的忘記了,現在重新思考一下,檔案的大小上限是10g,不可能在記憶體操作了。考慮設計一種hash使得如果兩個字串維相反串能得出相同的hash值,然後用該hash將檔案中的字串雜湊到不同的檔案中,再在各檔案中進行匹配。比如這樣的hash函式對字串上所有字元的ascii求和,因為長度在1k以內,因此範圍在int之內。更進一步,可以在上面那個hash後面再加乙個字串長度,可以得到更好的雜湊效果。

在各個單獨檔案中匹配時,如果採用的是第二種hash函式,那麼該檔案中的所有字串都有相同的長度。如果hash效果好,那麼這個檔案應該小到可以在記憶體中進行操作了。將檔案拷貝為兩份,分別按照不同規則hash:第乙份按前k位雜湊,第二份將字串的頭尾進行顛倒後按前k位雜湊(只是對於排序演算法顛倒,不必實際顛倒)。這裡的按前k位雜湊只需要前k位相同能得到相同結果就好,比如第i位的ascii乘以2^i。兩份拷貝中hash值相同的就很可能是要求的相反串對了,再進行實際匹配,工作量應該就可以接受了。

3.stl的set用什麼實現的?為什麼不用hash?

是用紅黑樹實現的,紅黑樹是一種平衡性很好的二分查詢樹。要使用hash的話,就需要為不同的儲存型別編寫雜湊函式,這樣就照顧不到容器的模板性了,而是用紅黑樹只需要為不同型別過載operator《就可以了。

修改於2011.9.2

百度面試題

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

百度面試題

一 選擇題 15分 共10題 1.任何乙個基於 比較 的內部排序的演算法,若對6個元素進行排序,則在最壞情況下所需的比較次數至少為 a 10 b 11 c 21 d 36 2.關係模型有三類完整性約束,定義外來鍵實現的是 完整性.a.實體完整性 b.參照完整性 c.使用者定義的完整性 d.實體完整性...

百度面試題

第一題 編寫乙個方法 求乙個字串的位元組長度第二題 如何控制alert中的換行第三題 解釋document.getelementbyid elementid style.fontsize 1.5em em是個相對單位。第四題將乙個類似圖中的效果分離成css和html 第五題按照格式 x年xx月xx日...