这个算法易于理解但是效果不是很好
class Solution(object):
def twoSum(self, numbers, target):"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
if not numbers and len(numbers)==0:
return []
for i in range(len(numbers)):
l,r=i+1,len(numbers)-1
while l<=r:
mid = l+(r-l)/2
if numbers[mid]==target-numbers[i]:
return [i+1,mid+1]
elif numbers[mid]<target-numbers[i]:
l=mid+1
else:
r=mid-1
return []
算法改进:用两个指针来扫描,一个前一个后
slow,fast=0,len(numbers)-1
while slow<fast:
if numbers[slow]<target-numbers[fast]:
slow+=1
elif numbers[slow]>target-numbers[fast]:
fast-=1
else:
return [slow+1,fast+1]