题目
给定一个已按照 升序排列 的整数数组 numbers
,请你从数组中找出两个数满足相加之和等于目标数 target
。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers
的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length
。
你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
解题
这道题其实和leetcode-1:两数之和几乎没什么差别,区别就是在于输出的下标从1开始,和 递增序列。就是说更想让你们通过双指针的方式来实现。哈希表则是两题都可以使用的方法。
方法一:哈希表
class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: hush ={} for i,num in enumerate(numbers): if target-num in hush: return [hush[target-num]+1,i+1] hush[num]=i
方法二:双指针
python解法
class Solution: 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 left+=1 else : # 如果比目标大,right-1 right-=1
C++解法
class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { int left=0,right=numbers.size()-1; while(left<right){ if(numbers[left]+numbers[right]==target){ return {left+1,right+1}; } else if(numbers[left]+numbers[right]<target){ left++; } else{ right--; } } return {}; } };