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 []