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.
分析
对撞指针,题目中的序列为有序数组(从左至右逐渐变大),分别定义两个指针指向数组的两端,计数指针指向求和,若等于target,返回当前指针索引;若小于target,左侧指针向右进一位;若大于target,右侧指针向左退一位。
代码
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int l = 0;
int r = numbers.size() - 1;
while (l < r)
{
if (numbers[l] + numbers[r] == target)
{
int res[2] = { l + 1,r + 1 }; //定义数组
return vector<int>(res, res + 2); //用数组初始化vector
}
else if (numbers[l] + numbers[r] > target)
{
r--;
}
else
{
l++;
}
}
throw runtime_error("input array is wrong"); //未找到结果,抛出异常,输入有误
}
};