兩數之和
- 暴力做法:雙重迴圈巢狀 o(n*n)
- 雙指標:由於陣列有序,最小+最大,如果大於滿足條件,右指標移動,如果小於左指標移動 o(n)
- 為什麼快:最佳化獲取資訊,知道其中一個與其他所有數的和與目標的大小關係。
三元陣列和
- 雙指標:將陣列排序,然後使用雙指標進行尋找合適的,left從目前尋找的後面一個開始。right從最後一個開始,然後進行尋找嘗試,將找到的組合存放入堆疊,雙指標交替運動尋找,如果和大於0則減小右指標,小於0則增大左指標,因為一開始雙指標是指向兩邊的,可以進行的最佳化就是根據排序陣列選取一些合適的條件。比如三個最小值都比target大,說明有序情況下,後面怎麼列舉都會更大,結束。x 和 最大兩個數之和都比target小,說明x過小,考慮將x變大(跳過本輪的列舉)