https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/
この問題は pointer を2つ使い target になる数を探していく。
pointer を left と right に置き、 left と right の合計が target の値と同じかを計算する。
合計が大きい場合は right の pointer を左にずらし、 合計が小さい場合は left の pointer を右にずらしていく。
合計がtarget の値になるまでループして index の位置を返す。
target = 9
| 1 | 3 | 4 | 5 | 7 | 11 |
↑ ↑
1 + 11 = 12 > 9
| 1 | 3 | 4 | 5 | 7 | 11 |
↑ ↑
1 + 7 = 8 < 9
| 1 | 3 | 4 | 5 | 7 | 11 |
↑ ↑
3 + 7 = 10 > 9
| 1 | 3 | 4 | 5 | 7 | 11 |
↑ ↑
3 + 5 = 8 < 9
| 1 | 3 | 4 | 5 | 7 | 11 |
↑ ↑
4 + 5 = 9
[3,4]
class Solution:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
left = 0
right = len(numbers) - 1
while left < right:
total = numbers[left] + numbers[right]
if total > target:
right -= 1
elif total < target:
left += 1
else:
return [left +1, right + 1]
return []