题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
解析:已经排好序,从头尾往中间找,直至两个数和为sum。从小到大排好序,相距较远的两个数乘积较小
class Solution { public: /*int find(vector<int> array,int a){ for(int i=0;i<array.size();i++){ if(a==array[i]) return i; } return -1; }*/ vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int> result; if(array.size()<=1) return result; /*int cj,a,b,other; bool f=true,g=false; for(int j=0;j<array.size()&&array[j]<=sum;j++){ other=find(array,sum-array[j]); if(other!=-1){ g=true; if(f){ cj=array[other]*array[j]; a=array[j]; b=array[other]; f=false; } else{ if(cj>array[other]*array[j]){ a=array[j]; b=array[other]; cj=a*b; } } } } if(g){ result.push_back(a); result.push_back(b); return result; } else return result; */ //排好序,连个数相距较远的,乘积较小 int i=0,j=array.size()-1; while(i<j){ if(array[i]+array[j]==sum){ result.push_back(array[i]); result.push_back(array[j]); break; } else if(array[i]+array[j]<sum){ i++; } else j--; } return result; } };