link: https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/
相較上一題 Two Sum,這題改為 sorted array,第二層 for 迴圈的優化可以用 binary search,這邊先偷用 java 內建的 binary search。
Accepted
Runtime: 0 ms, faster than 100.00% of Java online submissions for Two Sum II - Input array is sorted.
Memory Usage: 39.2 MB, less than 65.63% of Java online submissions for Two Sum II - Input array is sorted.
改用自己寫的 binary search,好處是能自己設定起始點和終點,結果反而比較慢…
Accepted
Runtime: 2 ms, faster than 22.41% of Java online submissions for Two Sum II - Input array is sorted.
Memory Usage: 39.4 MB, less than 38.37% of Java online submissions for Two Sum II - Input array is sorted.
這個做法的概念很簡單,目標是要找矩陣內的某兩個元素總和,使用兩個index先指向最大值和最小值的元素,並開始往中間找。
如果兩元素總和比目標大,那就讓比較大的index往前移,如果兩元素總和比目標小,就讓比較小的index往後移,直到最後找到正解為止。
我一開始其實有想到這個做法,後來放棄了。當初覺得不太對的考量點,這樣只掃過一次的作法,會不會不小心錯過正確答案,需要倒退走呢?
仔細想想,其實並不會。舉例來說,有一個矩陣[a, b, c, d, e, f, g],假設我們要找的組合是 c 和 e,檢查到 b 和 f 時只有兩種情況:
所以如果答案存在,從兩邊往中間走一定有辦法遇到。
Accepted
Runtime: 0 ms, faster than 100.00% of Java online submissions for Two Sum II - Input array is sorted.
Memory Usage: 38.9 MB, less than 88.82% of Java online submissions for Two Sum II - Input array is sorted.
Accepted
Runtime: 64 ms, faster than 56.89% of Python3 online submissions for Two Sum II - Input array is sorted.
Memory Usage: 14.7 MB, less than 18.56% of Python3 online submissions for Two Sum II - Input array is sorted.
leetcode