题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
分析:
完整代码:
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
// 声明一个容器变量
vector<int> data;
//检查输入的合法性
if(array.empty())
return data;
//声明一个变量,表示数组的长度
int length = array.size();
//声明两个变量,表示左边游标和右边游标
int ahead = 0;
int behind = length - 1;
//声明一个变量,用来表示两个数字的和
int CurrSum = 0;
//当两个游标的没有相遇
while(behind > ahead)
{
CurrSum = array[ahead] + array[behind];
//如果 CurrSum 等于 sum
if(CurrSum == sum)
{
//取出两个数
data.push_back(array[ahead]);
data.push_back(array[behind]);
return data;
break;
}
else if(CurrSum > sum)//如果 CurrSum 大于 sum
behind--;
else//如果 CurrSum 小于 sum
ahead++;
}
//返回最中的结果
return data;
}
};