- 题目:Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2 - 思路方法
注意题目说了两个重要条件:1,有序数组;2,有唯一解。所以解的两个数一定都是数组中唯一存在的数。
- 思路一
利用两个指针从数组的两侧开始向中间移动,寻找第一对和为target的两个数即为所求。
class Solution(object):
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
left, right = 0, len(numbers) - 1
while left < right:
if numbers[left] + numbers[right] == target:
return [left + 1, right + 1]
elif numbers[left] + numbers[right] > target:
right -= 1
else:
left += 1
- 思路二
扫描数组,用字典记录扫描历史,并判断可能成对的另一个数是否在数组中。
代码
class Solution(object):
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
num_dict = {}
for i, num in enumerate(numbers):
if (target - num) in num_dict:
return [num_dict[target - num], i + 1]
num_dict[num] = i + 1