两数之和 II - 输入有序数组
双指针
因为数组已经排好序,我们可以采用方向相反的双指针来寻找这两个数字,一个初始指向最
小的元素,即数组最左边,向右遍历;一个初始指向最大的元素,即数组最右边,向左遍历。如果两个指针指向元素的和等于给定值,那么它们就是我们要的结果。如果两个指针指向元素的和小于给定值,我们把左边的指针右移一位,使得当前的和增加一点。如果两个指针指向元素的和大于给定值,我们把右边的指针左移一位,使得当前的和减少一点。
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int m=numbers.size();int flag=0;
int i=0,j=m-1;vector<int>n;
while(flag==0)
{
if(numbers[i]+numbers[j]<target)
{
i++;cout<<"!";
}
else if(numbers[i]+numbers[j]>target)
{
j--;cout<<"?";
}
else
{
flag=1;cout<<"&";
}
}
n.push_back(i+1);n.push_back(j+1);
return n;
}
};