百度面試題 迭代開啟url問題

2021-09-30 15:34:00 字數 1003 閱讀 3726

乙個url指向的頁面裡面有另乙個url,最終有乙個url指向之前出現過的url或空,這兩種情形都定義為null。這樣構成乙個單鏈表。給兩條這樣單鏈表,判斷裡面是否存在同樣的url。url以億級計,資源不足以hash。

本題可以抽象為有環和無環情況下的鍊錶交叉問題:

情況一:兩條單鏈表均無環

最簡單的一種情況,由於兩條鍊錶如果交叉,他們的尾節點必然相等(y字歸併),所以只需要判斷他們的尾節點是否相等即可。

情況二:兩條單鏈表均有環

這種情況只需要拆開一條環路(注意需要儲存被設定成null的節點),然後判斷另乙個單鏈表是否仍然存在環路,如果存在,說明無交叉,反之,則有交叉的情況。

情況三:兩條單鏈表,一條有環路,一條無環路

這種情況顯然他們是不可能有交叉的

附:如何判斷一條單鏈表是否存在環路,以及找出環路的入口

快慢指標:在表頭設定兩個指標fast與slow,fast指標與slow指標同時向前移動,但是fast每次移動2個節點,slow每次移動1個節點,若fast指向null或者fast==slow時停止,這時如果fast指向null,則說明沒有環路,若fast==slow則說明有環路。

找環路入口:當fast==slow時,將fast重新指向表頭。slow原地不動。然後fast和slow在同時以每次乙個節點的速度向前移動,當他們再次重合時,就是環路入口。證明如下:

1.證明fast和slow肯定會重合

在slow和fast第一次相遇的時候,假定slow走了n步驟,環路的入口是在p步的時候經過的,那麼有slow走的路徑: p+c = n; c為p1和p2相交點,距離環路入口的距離;fast走的路徑: p+c+k*l = 2*n;   l為環路的周長,k是整數。顯然,如果從p+c點開始,p1再走n步驟的話,還可以回到p+c這個點同時p2從頭開始走的話,經過n步,也會達到p+c這點。

2.fast和slow在p+c點會重合,顯然他們從環的入口點就開始重合

百度面試題

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

百度面試題

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

百度面試題

1.乙個int陣列,裡面資料無任何限制,要求求出所有這樣的數a i 其左邊的數都小於等於它,右邊的數都大於等於它。能否只用乙個額外陣列和少量其它空間實現。2.乙個檔案,內含一千萬行字串,每個字串在1k以內,要求找出所有相反的串對,如abc和cba。當時怎麼想的忘記了,現在重新思考一下,檔案的大小上限...