這種飛航問題基本上都是屬於 Graph 題,題目敘述也很生活化(
根本旅行必備知識)。 因為所有的路徑有且只會被用一次,故是一個 Euler Circuit。進一步抽象,可說這題是屬於 Post-order traversal on Edges 問題。 從入口做 post-order ,會是出口先被紀錄,然後再往回 backtracking 回入口,把路上的所有 node 都記下來。 老實說技巧性有點太強,且還是高頻…。 另外注意英文閱讀,有些單字很重要例如 lexical order,沒注意到可能會出現錯誤。
最長回文子串 (Longest Palindromic Substring) 是常考題。Palindrome 就是正讀反讀都一樣的詞語,比如範例給的 “bab”、 “bb” ,實際單字如 “level” 等等都屬於它。因為較好的解法是 DP 類型,初見就能想到,難度也比較高。一般人能熟悉 Dynamic Programming - 2D matrix 解就好了。(看過令人膜拜的神解 Manacher’s Algorithm,時間複雜度提升到了 O(n) …)
Graph 用於表示物體與物體之間存在某種關係的結構,是內存中不一定連續的資料,每個節點會一個或多個 Reference 指向其他節點
- 可能有環
- 分無向圖和有向圖
- 沒有固定入口
- 可能有多個入口
類似這種 top k 問題且非樹結構,都可以直接用 Heap 來解題。
這是一道關於二叉搜索樹 Binary Search Tree 的題目。提示是讓我們用中序遍歷In-Order來解題。 可以複習一下 DFS 解法的 Pre-Order、In-Order Post-Order。 另外這道題的 Follow up 可以多思考,是假設該 BST 被修改的很頻繁,而且查找第 k 小元素的操作也很頻繁,問如何優化。
二元搜尋樹(英語:Binary Search Tree),也稱為有序二元樹(ordered binary tree)或排序二元樹(sorted binary tree)。 從 wiki 上得到的時間與空間複雜度 :
演算法 平均 最差 空間 O(n) O(n) 搜尋 O(log n) O(n) 插入 O(log n) O(n) 刪除 O(log n) O(n)