题目:
方法一:
二分查找的方法
由于是顺序数组,所以一次遍历数组中的元素
然后求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