【剑指offer】和为S的两个数字
题目链接:和为S的两个数字
题意:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
题解:也是一个模拟题。我们用两个指针,一个从最低位开始,一个从最高位开始。
因为是一个递增的数组。所以也是比较当前SUM值。如果当前sum小于S,增加低位;当前sum大于S,减小高位。
代码:
1 class Solution { 2 public: 3 vector<int> FindNumbersWithSum(vector<int> array,int sum) { 4 vector<int> ans; 5 int len = array.size(); 6 int i = 0; 7 int j = len-1; 8 while(i < j){ 9 if(array[i] + array[j] == sum){ 10 ans.push_back(array[i]); 11 ans.push_back(array[j]); 12 break; 13 } 14 else if(array[i] + array[j] < sum) i++; 15 else j--; 16 } 17 return ans; 18 } 19 };