两数之和 II - 输入有序数组

  
给定一个已按照升序排列  的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值  index1  和  index2,其中  index1  必须小于  index2。
说明:
        返回的下标值(index1  和  index2)不是从零开始的。
        你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
示例:
        输入:  numbers  =  [2,  7,  11,  15],  target  =  9
        输出:  [1,2]
        解释:  2  与  7  之和等于目标数  9  。因此  index1  =  1,  index2  =  2  。
  

自我解答

        可以使用两数之和解法:哈希。但是此题的数组是有序的,这说明  nums[i]  的匹配值  必定是
        在  nums[i+1]的匹配值  的右边,可以使用双指针来解决
  

 class Solution3:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        i, j = 0, len(numbers) - 1
        while i < j:
            num = numbers[i]
            wanted = target - num
            while numbers[j] > wanted:
                j -= 1
            if numbers[j] == wanted:
                return [i + 1, j + 1]
            i += 1
        return [0, 0]

  
原题链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted