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

Easy

方法一(二分搜索)

思路

以上,尝试写一下代码,AC!

代码

python3

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
      for left,v in enumerate(numbers):
        offset = bisect.bisect_left(numbers[left+1:],target-v)
        right = offset + left + 1
        if right >= len(numbers):
          continue
        if v + numbers[right] == target:
          return [left+1,right+1]

方法二(双指针)

思路

以上,尝试写一下代码,AC!

代码

python3

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
      i = 0
      j = len(numbers) - 1
      for _ in range(len(numbers)):
        t = numbers[i] + numbers[j]
        if t < target:
          i += 1
        elif t == target:
          return [i+1,j+1]
        else:
          j -= 1
      return [0,0]