1 题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
2 思路和方法
数组已经排好序了,设定两个指针small和big指向两端,如果两者的和大于sum,big左移,如果小于sum,small右移,一旦等于,那么同时这两者也正好是乘积最小的一对(3和9,4和9,6和6,不难看出3和9的成绩最小),我们就可以结束了。
3 C++核心代码
1 class Solution { 2 public: 3 vector<int> FindNumbersWithSum(vector<int> array,int sum) { 4 vector<int> result; 5 int len = array.size(); 6 if(len<=1)return result; 7 int Sum; 8 int small = 0; 9 int big = len - 1; 10 while(small<big){ 11 Sum = array[small] + array[big]; 12 if(Sum>sum) big--; 13 else if(Sum<sum) small++; 14 else{ 15 result.push_back(array[small]); 16 result.push_back(array[big]); 17 break; 18 } 19 } 20 return result; 21 } 22 };
参考资料
https://blog.csdn.net/u012477435/article/details/83351659#_873