题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
1 class Solution { 2 public: 3 vector<int> FindNumbersWithSum(vector<int> array,int sum) { 4 vector<int> vv; 5 int len = array.size(); 6 if (len < 2) 7 return vv; 8 map<int,int> mm; 9 for (int i = 0;i < len ; ++i) 10 { 11 if(mm.count(array[i]) == 0) 12 { 13 mm[array[i]] = 1; 14 } 15 else 16 { 17 ++mm[array[i]]; 18 } 19 } 20 int i = 0; 21 bool have = 0; 22 for (;i < len/2 + 1 ; ++i) 23 { 24 --mm[array[i]]; 25 if(mm.count(sum - array[i]) > 0 && mm[sum - array[i]] > 0) 26 { 27 have = 1; 28 break; 29 } 30 ++mm[array[i]]; 31 } 32 if(!have) 33 return vv; 34 35 vv.push_back(array[i]); 36 vv.push_back(sum - array[i]); 37 return vv; 38 } 39 };