题目链接:点击查看
题目描述:
在一个增序的整数数组里找到两个数,使它们的和为给定值。已知有且只有一对解。
输入输出:
输入:numbers = [2,7,11,15], target = 9 输出:[1,2]
输入:numbers = [2,3,4], target = 6 输出:[1,3]
题目分析:
本题的一般思路为用嵌套循环来查找符合条件的两个数,但用双指针可以减少代码的时间复杂度,并且可以达到简化代码的效果。因为数组是已经排好序的,我们可以采用方向相反的双指针来寻找这两个数字,一个初始指向最小的元素,即数组最左端,向右遍历,另一个初始指向最大元素,即数组最右端向左遍历。
如果两个指针指向元素的和等于给定值,那么它们就是我们要的结果。如果两个指针指向元素的和小于给定值,我们把左边的指针右移一位,使得当前的和增加一点。如果两个指针指向元素的和大于给定值,我们把右边的指针左移一位,使得当前的和减少一点。
代码:
vector<int> twoSum(vector<int>& numbers, int target)
{
int l=0,r=numbers.size()-1,sum;//用l,r分别模拟指向数组左端,右端的指针
while(l<r)
{
sum=numbers[l]+numbers[r];
if(sum==target)
break;
if(sum<target)
l++;
else
r--;
}
return vector<int>{l+1,r+1};
}