输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
思路:左右两个指针,和大于sum的话right--,小于left++;加两个变量存储积最小的结果。
1 class Solution { 2 public: 3 vector<int> FindNumbersWithSum(vector<int> array,int sum) { 4 int n=array.size(); 5 vector<int> res; 6 if(n<2) return res; 7 int left=0,right=n-1; 8 int add1=array[n-1],add2=array[n-1]; 9 while(left<right){ 10 int tmp=array[left]+array[right]; 11 if(tmp==sum){ 12 if((array[left]*array[right])<(add1*add2)){ 13 add1=array[left]; 14 add2=array[right]; 15 } 16 left++; 17 continue; 18 } 19 if(tmp>sum){ 20 right--; 21 continue; 22 } 23 if(tmp<sum){ 24 left++; 25 continue; 26 } 27 } 28 if(add1!=add2){ 29 res.push_back(add1); 30 res.push_back(add2); 31 } 32 return res; 33 } 34 };