【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出
思路
因为数组已经排好序了,我们设定两个指针small和big指向两端,如果此时两者的和大于sum,那么big左移,如果小于sum,那么small右移,一旦等于,那么同时这两者也正好是乘积最小的一对,我们就可以结束了。
class Solution
{
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum)
{
vector<int> ans;
int len = array.size();
if(len<2)
return ans;
int small = 0;
int big = len-1;
while(small<big)
{
if(array[small]+array[big] == sum)
{
ans.push_back(array[small]);
ans.push_back(array[big]);
return ans;
}
else if(array[small]+array[big]>sum)
big--;
else
small++;
}
return ans;
}
};