题目:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
代码:
1 class Solution { 2 public: 3 vector<int> FindNumbersWithSum(vector<int> array,int sum) { 4 vector<int> p; 5 int length = array.size(); 6 int low = 0, high = length -1; 7 while(low < high){ 8 int Sum = array[low] + array[high]; 9 if( Sum < sum) low ++; 10 else if( Sum > sum) high --; 11 else{ 12 p.push_back(array[low]); 13 p.push_back(array[high]); 14 break; 15 } 16 } 17 return p; 18 } 19 };
我的笔记:
利用滑动窗口的原理,设置上限指针和下限指针,并根据Sum和的情况来移动指针,题目要求乘积最小,通过这样计算可以发现,两数距离越大。