

是 Two Sum 的一種另類進階,要從 nums 中找出和為
0的三個 element ,由於答案可能有多種,故答案會是個 List of list 。特別注意,題目中有提到不能有兩個內容一樣的 list,故要做去重處理。 也因為題目解答並沒有對 nums 的 index 有任何要求,故可以把 nums 排序,為解題拓開另一種思路。

第 16 題跟 15 題相似,又增加了些許難度。題目敘述一樣也很簡單 : 求 nums 內最接近 target 值的三數和。因為是求最接近 target 值的三數和,而解答也沒有要關注其 index,故還是可以考慮將 nums 排序,這樣就可以確定指針滑動方向。

這道題要我們從有序數組中去除重複項,題目難度雖然被歸為 easy 等級,但在條件限制上的討論,蠻多東西可以釐清討論的。 英文方面寫得蠻長,記得要看到最後,因為有寫一些限制如 :
O(1)extra memory- The relative order of the elements should be kept the same.
所以不能用 Set 或另開 array 去寫。題目也花了些篇幅去說明,只要原 array 前面長度部分內,有把所有不重複數字列出來就好,不需要在意後面 array 的元素。

這題需求是要合併 k 個 linked-list 成一個大的 linked-list,每個 linked-list 都是有序的,且大的 linked-list 也必須是有序的,是 LeetCode21. Merge Two Sorted Lists 的進階題,但本題可用 min heap 解題,還蠻巧妙的,故紀錄一下。

LeetCode21. Merge Two Sorted Lists這道題目主要是熟悉 linked-list 相關重點,例如:
- dummy head
- 當新 Linked List 加完所有的節點後,需要返回其頭節點的 next,即
dummy.next這些技巧在後續解決 Linked List 題目時會反覆用到。

最長回文子串 (Longest Palindromic Substring) 算是一個常考題。Palindrome 的定義是順讀逆讀,字母都一樣的詞語,比如範例給的 「 bab 」、 「 bb 」 等等,實際單字如 「 level 」 也是一個的 Palindromic 單字。
先熟悉「 Dynamic Programming - 2D matrix 」解和「 中心擴散法 (Expand Around Center) 」就好了,還有聽過最佳解 Manacher’s Algorithm,時間複雜度可優化到了 O(n),之後再花其他篇幅去補充。

Stack 是一種「後進先出 LIFO」的容器 (Last if First Out),適用於需要紀錄之前的狀態或是值的情況,必要的時候可以回到之前的樣子。對於 Java 和 Python 的 Stack 使用可以記憶一下:
- Java 推薦是雙端隊列 Deque 取代 Stack
- Python 更簡單的可直接將 List 作為 Stack 使用



