题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
解题思路:
因为数组是排序的数组,所以设置两个指针,一个指向数组的起始位置,一个指向数组的结束位置。
当两个指针指向的数字之和为S时,此时就是两个数的乘积最小的时候。
考虑数组中有负数的情况,此时也是最小的时候。
vector<int> FindNumbersWithSum(vector<int> array,int sum){
vector<int> result;
if(array.size() == 0){
return result;
}
int left = 0;//数组的起始下标
int right = array.size()-1;//数组的结束下标
while(left < right){
int num = array[left] + array[right];
if(num == sum){
result.push_back(array[left]);
result.push_back(array[right]);
return result;//此时找到的序列就是最小的序列
}else if( num > sum){
right--;
}else{
left++;
}
}
return result;
}