切換
舊版
前往
大廳
主題

LeetCode - 167. Two Sum II - Input array is sorted 解題心得

Not In My Back Yard | 2020-08-29 00:00:03 | 巴幣 0 | 人氣 185

題目連結:


題目意譯:
(2022/06/10:原英文題目敘述有更新過,本篇需要修正)
給定一個已按照升序排序的整數陣列,找到兩個數字使得其總和為 target。

函式 twoSum 應回傳兩數總和為 target 的索引值 index1 、 index2 ,且 index1 必須小於 index2。

注:
你回傳的答案(index1 以及 index2)不是從 0 開始數的(從 1 開始)。
你可以假設每個輸入有唯一解且同一元素不能使用兩次。



範例測資:
範例:
輸入: numbers = [2,7,11,15], target = 9
輸出: [1,2]
解釋: 2 與 7 的總和為 9。因此 index1 = 1 、 index2 = 2。


解題思維:
雜湊表在這題當然同樣可行,如此題的做法。



但是因為有排序過了,因此我們也可以使用二分搜尋法(Binary Search)來找到解。對於每個數字 numbers[i] ,在 numbers 裡用二分搜找找看有無存在 target - numbers[i]。如果有的話且該值的索引值不等於 i 即是所求。反之,就繼續到下一個數字即 numbers[i + 1]。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作