此題給定一個沒有 overlapping 且按照起始座標排序的 interval 集合,然後再給一個 newInterval 放到該集合內,要合併 interval 使它們都不會重疊,最後返回新的 non-overlapping intervals。 本題的生活化的模擬,可以把題目想成自修室租借,然後插入自己的使用時段(
亂入別人的使用時間…),最後返回整個自修室被租借的時段。
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 排序,這樣就可以確定指針滑動方向。
Array 是 Java 中的基本功能,而 ArrayList 是 Collection 的一部分; ArrayList 和 LinkedList 都是 Java 中的集合類型,它們都實現了 List 接口。基本特徵簡單如下 :
- Array 是一個有固定大小的,每次創建都需要設定,而且在創建後,是不能再更改大小
- ArrayList ,是一個有浮動大小的Array,且適用於需要快速訪問集合中的元素的場景。
- LinkedList 適用於頻繁插入和刪除元素的場景。
如果需要實現隊列或棧等數據結構,也可以選擇 LinkedList。