【剑指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 };

 

posted @ 2020-03-04 23:13  甜酒果。  阅读(158)  评论(0编辑  收藏  举报