题目描述
输入一个递增排序的数组和一个数字 s
,在数组中查找两个数,使得它们的和正好是 s
。如果有多对数字的和等于 s
,则输出任意一对即可。
//方法:左右夹逼法,只需要2个指针,两头的数肯定乘积最小,中间的数乘积最大 。时间复杂度 O(N),空间复杂度 O(1)
/*
1.left开头,right指向结尾
2.如果和小于sum,说明太小了,left右移寻找更大的数
3.如果和大于sum,说明太大了,right左移寻找更小的数
4.和相等,把left和right的数返回
*/
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
int left=0;
int right=array.size()-1;
vector<int> result;
while(left<right)
{
if((array[left]+array[right])<sum)
{
left++;
}
else if((array[left]+array[right])>sum)
{
right--;
}
else
{
result.push_back(array[left]);
result.push_back(array[right]);
break;
}
}
return result;
}
};