题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思路:此题关键之处在于任意多对两个数的和相等,乘积最小的两个数为两个数之差的绝对值最大,也就是说可以先定义首元素和最后一个元素,
判断两个数之和是否等于给定sum,如果不等,向后递增或者向前递减,(注意,该数组严格递增排序,题目已说明)
class Solution { public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { vector<int>res; int n = array.size(); int i = 0; int j = n - 1; while (i < j) { if (array[i] + array[j] == sum) { res.push_back(array[i]); res.push_back(array[j]); break; } while (array[i] + array[j] > sum) j--; while (array[i] + array[j] < sum) i++; } return res; } };