這是一道編程題目,結合了數據結構和簡單算法(如遞歸等)。
考察點:
1. 候選人應該明確什么是 DeepCopy 并主動溝通
2. 候選人應該清楚的定義數據結構 這個問題里面,需要定義節點,節點只要有 {value, Collection neighbors} 就可以 了,增加別的成員一般是不合理的。
候選人應該意識到需要定義數據結構,如果不清楚定義(是個扣分項)需要提醒候 選人。
圖的話可以不定義單獨的數據結構,有 Collection 所有節點集合就可以了。當然專門 定義也可以。
有的候選人會有 Collection 和 Collection 定義(Node 里面沒有 edge),或者有的候 選人用二維鏈接矩陣,這也 OK。
數據結構定義合理性檢查: 例如包含一些算法需要的 mutable variable 在數據結構里面,破壞結構定義封裝以 及 immutability 和 thread safety 的話,對于有經驗的候選人是個比較大的減分項, 對于學生一般是 OK 的。
3. 編程實現 一般來說比較方便的是用遞歸 /DFS 實現,候選人也可以選擇其他算法(如 BFS) 以 JAVA 為例:
4. 其他
這個編程的過程,經常出現的是遞歸的方法和 wrApper 方法之間劃分不清,出現大 量的重復代碼,候選人這里花多少時間解決也是一個能力的表現。
還有經常有候選人意識不到 DeepCopy 里面需要保持圖的結構因此想不到用 Map, 這個也是不行的。
當然如果要求不高,可以直接把題目編程 DeepCopy 一個樹,這 樣就沒有去重的需求了。
能夠正確完成的,可以 follow up:如線程安全,問一下候選人方法是否是線程安全 的(如果在 Node 節點里面存一些臨時變量,或者把 Map 作為全局變量等就不是 了),可以問如何改造成線程安全之類的問題。
另外 Follow up Big(O):時間復雜度(O(V) + O(E))