敘述
這是 Algorithm I
的第三天第二個題目,總共有兩題。
- 難度:
Medium
- 花費時間: 2hr
- 題目
傳入一個正序排列的陣列(numbers)和一個目標數字(target),找出陣列裡的兩個數字相加剛好等於 target ,然後回傳這兩個數字索引值組成的陣列。
點我開啟限制與範例
限制:
2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers
is sorted in non-decreasing order.-1000 <= target <= 1000
- 測試陣列只會剛好有一個答案
Example 1:
1 | Input: numbers = [2,7,11,15], target = 9 |
Example 2:
1 | Input: numbers = [2,3,4], target = 6 |
Example 3:
1 | Input: numbers = [-1,0], target = -1 |
筆記
由於題目已經把陣列由大到小排好了,
所以使用 Two-pointers 來實做,思路如下:
- Pointer 1: 一開始先指定陣列裡的最小值,如果兩個 Pointer 指的 value 相加小於 target ,那麼就把這個指標往後推(+1)。
- Pointer 2: 一開始先指定陣列裡的最大值,如果兩個 Pointer 指的 value 相加大於 target ,那麼就把這個指標往前推(-1)。
如果兩個加起來等於 target ,那就回傳。
程式碼
1 | /** |