和为S的两个数字★★
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
解题思路:
遍历数组,二分找另一个数字。跟《和为S的连续正数序列》基本类似。
class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int>res; int n = array.size(); int a, b; int vmin = 0xfffffff; for(int i = 0; i < n; i++){ int l = i+1; int r = n-1; int mid = (l+r)/2; while(l <= r){ mid = (l+r)/2; if(array[mid] < sum-array[i]){ l = mid+1; }else if(array[mid] > sum-array[i]){ r = mid -1; }else{ if(array[i]*array[mid] < vmin){ a = array[i]; b = array[mid]; vmin = array[i]*array[mid]; } break; } } } if(vmin == 0xfffffff) return res; res.push_back(a); res.push_back(b); return res; } };
学学学 练练练 刷刷刷