百度面試題c。zz

2021-08-30 14:36:36 字數 1704 閱讀 1310

雖然情況一是第乙個情況,但是看上去比較複雜,我們放到最後來說,先從第二個情況開始說。 10

/       \

6         14

/  \       / \

4   8   12

16 /  \

3   5

畫乙個二叉樹來做例子。如果我們要找3

和8這兩個節點的公共父親節點,我們的做法是首先找到3

到根節點的路勁,然後找到8

到根節點的路徑。 10

//       \

6         14

/  \        / \

4   8   12

16 /   \

3   5 3

的路徑用紅色表示,8

的用綠色表示,可以看到,這裡的問題實際上是另乙個我們熟知的問題,有2

個相交的單鏈表,找出它們的相交點!

只要把這個二叉樹的倒過來看,或者把脖子倒過來看就知道了:)

那個方法也是傳統的求出linkedlist a

的長度lengtha, linkedlist b

的長度lengthb

。然後讓長的那個鍊錶走過abs(lengtha-lengthb)

步之後,齊頭並進,就能解決了。

自己寫了個**,總覺得有些拖沓冗餘,希望有緣人看到文章之後能幫我改寫的更和諧一些。

還是原來這個圖,情況三,如果是個二叉搜尋樹,而且root

和a, b

已知,我們這個case

假設a,b=3,8

。從知道根這個條件我們很自然聯想到遞迴(

當然不遞迴也可以)

地往下找。關鍵是收斂條件,什麼情況下可以判斷出當然檢查的這個節點是最近父親節點呢?其實從這個例子已經可以看出一些端倪了,如果當前訪問的節點比a,b

來的都小,肯定不行。如果比a,b

都大,也不行。那也就是說,這個節點只有在a<=node<=b

的區間內才成立(

我們假定a這裡)

。這樣的問題,網上廣為流傳著類似的**:

好,前面的問題都解決了,我們再回過頭來看第乙個情況,只有root

和left, right

節點,沒有parent

也不是排序樹,怎麼辦?網路上也流傳著很多所謂的lca,rmq

演算法,我們不暇找個最合適的,尤其是在面試的時候,特定時間空間下你很難寫出乙個邏輯非常複雜的東西(

比如你會在面試的時候去實現乙個suffix tree

還是用動態規劃來求最長公共子串,哪怕效率不同,我也選擇動態規劃:))

。所以這裡,碰到類似的問題的時候,我選擇簡單的記錄找到node1

和node2

的路徑,然後再把它們的路徑用類似的情況二來做分析,比如還是node1=3,node2=8

這個case.

我們肯定可以從根節點開始找到3

這個節點,同時記錄下路徑3,4,6,10

,類似的我們也可以找到8,6,10

。我們把這樣的資訊儲存到兩個vector

裡面,把長的vector

開始的多餘節點3

扔掉,從相同剩餘長度開始比較,4!=8, 6==6, coooool,

我們找到了我們的答案。下面的**完全按照這個思路寫成

這段**經歷了大概30

分鐘的修改和debug

,然後才逐漸穩定下來,真的很難想象如果是在面試的環境下,在紙筆之上會有如何的表現,可能真是只有天知道了。

百度面試題

有一根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。當時怎麼想的忘記了,現在重新思考一下,檔案的大小上限...