题目在这:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/
法一(哈希表法):
思路分析:
我们可以建一个哈希表来辅助。
我们知道 numbers里的两个数相加等于 target。
也就是说,
target - numbers里的一个数 = numbers里的另一个数
且题目中说每次只对应一种答案,所以我们创建哈希表 key存numbers里的数值,value里存该数对应的数组下标
完整代码:
def twoSum(self, numbers: List[int], target: int) -> List[int]:
hashmap = {} # key存值 val存下标
for index,val in enumerate(numbers): # enumerate 下标和值
if target - val in hashmap:
return [hashmap[target-val]+1,index+1]
hashmap[val] = index
法二(双指针法):
思路分析:
首先需要明确一点,numbers 按 递增顺序 排列
我们可以建立两个指针指向开头和结尾。如果开头和结尾指针相加比目标值大,则右指针往后挪(越往里越小嘛)。
同理,比目标值小则左指针往后挪。
完整代码
def twoSum(self, numbers: List[int], target: int) -> List[int]:
left = 0
right = len(numbers) - 1
while left < right:
if numbers[left] + numbers[right] == target:
return [left + 1,right + 1]
elif numbers[left] + numbers[right] < target:
left += 1
else:
right -= 1