输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
思路:双指针法
先在数组中选择两个数字,如果它们的和等于输入的s,那么就找到了要找的数字;如果小于s,希望两个数字的和大一些,由于数组已经排好序了,可以考虑选择较小数字后面的那个数字。因为后面的数字要更大一些,那么两个数字的和也就大一些;同样的,两数之和大于s,选择较大数字前面的那个数字,前面的数字更小一些。不断的向后和向前遍历,当两个前后指针发生交换(前->后,后->前),停止遍历。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
ahead = 0
behind = len(nums)-1
while ahead<=behind:
cur = nums[ahead] + nums[behind]
if cur == target:
return [nums[ahead],nums[behind]]
break
elif cur > target:
behind-=1
else:
ahead+=1