Multiple points 的操作,經常用在 array 或 linkedList 上,有幾點事情可以在刷題時特別注意:
指標會把 list 切成幾個部分,特別注意每一部份的定義
list 是否有排序或可以排序
指標移動是使用快慢指標還是左右指標
會不會改變原本的 list
其中第一點,把 array 切成幾個部分,每個部份的定義,是最重要的思想,可以多思考。
Dynamic Programming 大概算是 leetcode 裡面平均難度最高的章節了,還蠻需要練習的。但在講 DP 之前,我們可以先講 Search,因為 Dynamic Programming 其實就是 Search + Memoization。
前面有介紹了 Binary Search 的通用模板,但通用模板還是有缺點,就是要找的目標須在 array 範圍內,這樣才能定義 index。但很多時候題目並不會有一個準確的 array 被定義,還是需要了解各個模板才能比較好的去解答各式題目。
Binary-Search (二分搜尋法),是一種針對已經排好序的區間內, O(logN) 的搜索方式。 Binary-Search 在處理邊界時很容易出錯。 基本上都是沒注意到兩大原則 :
- 每次都一定要縮減收所區域
- 每次縮減不能排除潛在答案
雖然淺顯易見,但實踐在寫的時候還是常常會寫出 bug 。