题目
【输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,让输出的两个数的乘积是最小的】
1、分析
用两个指针分别指向数组的第一个元素和最后一个元素,若两数的和大于s ,则尾指针前移;若两数的和小于s,则头指针后移。
2、代码
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> res;
if(array.size()<2)
return res;
vector<int>::iterator ahead=array.begin();
vector<int>::iterator behind=array.end()-1;
while(ahead<behind)
{
if(*ahead+*behind==sum)
{
res.push_back(*ahead);
res.push_back(*behind);
break;
}
if(*ahead+*behind<sum)
++ahead;
if(*ahead+*behind>sum)
--behind;
}
return res;
}
};