反轉 Linked List 是一道經典的題目,可以用分別用 :
- 指針 (iterative)
- 遞迴 (recursive)
兩種截然不同的風格來解答。個人認為是蠻好的題目,可以多寫幾次,並從各種不同的解答方式來說明思考,故在此筆記。要說簡單也不算,對於 recursive 解法一開始我覺得有點難理解 ! 雖然被歸類在 Easy,但我私心覺得蠻容易打擊第一次做的人的…
Multiple points 的操作,經常用在 array 或 linkedList 上,有幾點事情可以在刷題時特別注意:
指標會把 list 切成幾個部分,特別注意每一部份的定義
list 是否有排序或可以排序
指標移動是使用快慢指標還是左右指標
會不會改變原本的 list
其中第一點,把 array 切成幾個部分,每個部份的定義,是最重要的思想,可以多思考。
Leetcode 幾個數字題,15、16、18,基本上套路都是一樣的(
甚至可以預期可能還會出 5 Sum…),整體的解法都差不多,可以一起複習,重點仍然是 :
- 排序 array
- 避免的重複項
以 3Sum 此基礎上,再加了一個循環而已。
是 Two Sum 的一種另類進階,從 nums 中找出和為
0
的三個 element ,並組成 List of list 。特別注意,不能有兩個內容一樣的 list。因為整個題目並沒有對 nums 的 index 有任何要求,故可以把 nums 排序,為解題拓開另一種思路。
這題跟 15 題相似,又增加了些許難度。題目敘述一樣也很簡單 : 求 nums 內最接近 target 值的三數和。優化關鍵點一樣是,把 nums 排序,這樣就可以確定指針滑動方向。
這道題要我們從有序數組中去除重複項,題目難度雖然被歸為 easy 等級,但在條件限制上的討論,蠻多東西可以釐清討論的。 英文方面寫得蠻長,記得要看到最後因為有寫一些限制如 :
- O(1) extra memory
- The relative order of the elements should be kept the same.
所以不能用 Set 或另開 array 去寫。另外也花了些篇幅去說明,只要原 array 前面長度部分內,有把所有不重複數字列出來就好,不需要在意後面 array 的元素和 array 的長度。