def twosum(self,numbers:List[int],target:int)->List[int]:
left,right=0,len(numbers)-1
while left<right:
if target-numbers[left]>numbers[right]:
left+=1
elif target-numbers[left]<numbers[right]:
right-=1
else:
return left+1,right+1
return []
算法流程:
1.初始化: 双指针 i , j 分别指向数组 numbers 的左右两端 (俗称对撞双指针)。
2.循环搜索: 当双指针相遇时跳出。
若 target-numbers[left]>numbers[right] ,则指针 right向左移动,即执行 right-=1。
若 target-numbers[left]<numbers[right],则指针left向右移动,即执行 left+=1。
若 target-numbers[left]=numbers[right],由于题目要求索引从1 开始,因此返回数组 [left+1,right+1]。
3.若循环结束,则返回空数组,代表无和为target 的数字组合。