题目:
方法一:
二分查找的方法
由于是顺序数组,所以一次遍历数组中的元素
然后求target与该元素的差值
从数组中以该元素为开头的子数组中,使用二分查找,寻找等于差值的元素
下标组成列表
返回
class Solution(object):
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(len(numbers)):
x = target - numbers[i]
left = i + 1
right = len(numbers) - 1
while left <= right:
mid = (right + left) // 2
if numbers[mid] == x:
return [i+1,mid+1]
elif numbers[mid] < x:
left = mid + 1
else:
right = mid - 1
方法二:
使用Hash table的方法
创建一个dict
键值为差值,value为求差元素的下标
遍历数组时先寻找dict中是否有该元素
如果存在则组建list,返回
时间复杂度为O(n),要优于第一种算法
class Solution(object):
class Solution(object):
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
dict1 = {}
for i in range(len(numbers)):
if numbers[i] in dict1:
return [dict1[numbers[i]], i + 1]
else:
x = target - numbers[i]
dict1[x] = i + 1