貢獻者: 月前龍馬-lonmu
模擬面試: 漢
Repeat
Example
Approach
Code
Test
Opmization
🧔 : interviewer 👶:interviewee
🧔 : 您好 今天由我來主詞這場面試,這邊有個問題想要請你解一下,因為本公司有經營電子商務等相關業務,平常儲存訂單的內容我們會以singly ordered linked list去儲存 想請問那如果想合併兩個客戶的資料 而且預期得到以訂單編號由小到大合併好的結果 可以說明一下你會怎麼做
👶 : 我可以理解為今天資料由 singly ordered linked list 去儲存 那想要合併兩個客戶資料 那就是將 兩個 singly ordered linked list 合併為一個 singly ordered linked list
簡單帶個例子 e.g. list1: 1->5, list2: 2->4, expected result: 1->2->4->5 這樣我對題目的理解是對的嗎
🧔 : 沒錯 你對題目的理解是對的
👶 : 好的,那我這邊目前想到的方法為,先新開一個之後要回傳的空節點指標ans,和一個指向尾端的tail指標,使用while的方式當兩個linked list皆不為空,則將兩者擁有較小值的Head node的list,接到要回傳的ans的尾端,並將tail和該list指向下一個node做更新,而當兩者其中一條linked list為空時,跳出迴圈,並將不為空的linked list再接到ans list後方即完成merge了
// new node ptr: ans, tail
// while twolist both are not empty
// link the list which has the smaller head to the tail
// update tail and the respond list
// check two list and link the rest one
🧔 : 方法大致沒問題 那你可以開始 implement 剛剛討論的方法了
👶 : coding. . . finished 帶入example 解釋code沒問題
🧔 : ok 那可以分析一下 你寫的程式 他的時間複雜度如何
👶 : 由於 while 迴圈的執行次數是取決於兩個 list 中較短者,假設 list 長度分別為 n 與 m ,時間複雜度為 O(n+m)。
🧔 : ok
🧔 : 那今天系統有需求 需要合併的不是僅有兩個客戶的資料 而是同時有多個人的話你會怎麼做 鑒於時間關係 你可以大概說明你的想法就可以了
👶 : 可以使用 merge sort divide&conquer的概念 使用recursion陸續兩兩分堆做到divide的步驟 後再開始conquer 運用剛剛寫的程式碼 兩條兩條list去做merge 最後合併成一條 linked list
e.g. vector list: a,b,c,d,e
=> 1st level merge: ab, cd ,e
=> 2nd level merge: abcd,e
=> 3rd level merge: abcde
🧔 : 好 那今天就先到這邊 稍待與主管和人資討論 再連絡你 謝謝
優點
可改進的地方
優點
寫code前的pseudocode不錯。
可改進的地方
預期得到這樣…,或許直接照著講會比較好。