题目:
Given an array of integers that is already sorted in ascending order,find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2.
Note:
Your returned answers (both index1 and index2) are not zero-based. You may assume that each input would have exactly one solution and you may not use the same element twice.
Example:Input: numbers = [2,7,11,15], target = 9 Output: [1,2] Explanation: The sum of 2 and 7 is 9. Therefore index1 = 1, index2 = 2.
解释:
输入是排好序的,一看到排好序的就要想到二分查找,双指针等。注意index是从1开始。
当然这道题目用I中的字典的解法也是可以的(1. Two Sum(python+cpp)),只不过双指针解法不用额外空间。
双指针解法:
python代码:
class Solution(object):
def twoSum(self, numbers, target):
"""
:type numbers: List[int]
:type target: int
:rtype: List[int]
"""
i=0
j=len(numbers)-1
while i<j:
if numbers[i]+numbers[j]<target:
i+=1
elif numbers[i]+numbers[j]>target:
j-=1
else:
return i+1,j+1
c++代码:
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int i=0,j=numbers.size()-1;
vector<int>result;
while(i<j)
{
int a=numbers[i],b=numbers[j];
if (a+b<target)
i++;
else if(a+b>target)
j--;
else
{
result={i+1,j+1};
return result;
}
}
}
};
总结:
看到排好序的list就要想到二分查找和双指针。