题目
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
解法
- 采用双指针法
- 设置头尾两个指针。
- 如果两个指针指向的值之和大于S,则尾指针前移一位;如果两个指针指向的值之和小于S,则头指针后移一位;
- 满足条件再进行判断即可。
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int>num;
if(array.size() ==0 )
return num;
int i=0, j=array.size()-1;
int flag = 0;
while(j > i)
{
int s = array[i] + array[j];
if(s == sum)
{
flag++;
if(flag > 1)
{
if(array[i] * array[j] < num[0]*num[1])
{
num[0] = array[i];
num[1] = array[j];
}
}
else
{
num.push_back(array[i]);
num.push_back(array[j]);
}
j--;
}
else if(s > sum)
j--;
else
i++;
}
return num;
}
};