题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。分析:这个题由于是递增排序的数组,所以很简单,我们从数组的两头开始找起,如果和大于S,那么大的往前移一位(因为数组递增,现在的小加上大已经超过了S,那么小后面的数和大的相加都会超过S),如果小于S,那么小的往后挪一位(因为数组递增,现在小的加大的小于S,那么大的前面的数与小的之和肯定都小于S),如果等于就存下来,因为两数和确定的话,两数离得越远积越小,所以第一组存下来的就是积最小的。
代码:
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> res;
if(array.size()<2)
return res;
int num1=0,num2=0,i=0,j=array.size()-1,temp=0;
while(i<j){
temp=array[i]+array[j];
if(temp>sum)
j--;
if(temp==sum){
res.push_back(array[i]);
res.push_back(array[j]);
break;
}
if(temp<sum)
i++;
}
return res;
}
};
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> res;
if(array.size()<2)
return res;
int num1=0,num2=0,i=0,j=array.size()-1,temp=0;
while(i<j){
temp=array[i]+array[j];
if(temp>sum)
j--;
if(temp==sum){
res.push_back(array[i]);
res.push_back(array[j]);
break;
}
if(temp<sum)
i++;
}
return res;
}
};