和为S的两个数
2020-06-21 本文已影响0人
UAV
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述
对应每个测试案例,输出两个数,小的先输出。
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array, int sum) {
vector<int> result;
//用来存储两个数字
int num1 = 0, num2 = 0;
//用来保存两个数字的乘积
int product = INT_MAX;
int i = 0, j = array.size() - 1;
while (i < j)
{
//两个数字求和 ,两个数字求积,如果符合要求更新连个数字的最小乘积
if ((array[i] + array[j] == sum) && (array[i] * array[j] < product)) {
num1 = array[i];
num2 = array[j];
product = num1*num2;
}
else if (array[i] + array[j] > sum) {
j--;
}
else
{
i++;
}
}//如果找到两个数的乘积为S
if (product < INT_MAX) {
result.push_back(num1);
result.push_back(num2);
}
return result;
}
};