面试题57:和为S的数字

1 题目描述

  输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

2 输入

num[], S

3 输出

  输出两个数,小的先输出。

4 样例输入

1,2,3,5,7,10,11,15

5 样例输出

4,11

6 求解思路

  双指针法,first从0开始,end从length - 1开始。

7 C++版本代码如下

vector<int> FindNumbersWithSum(vector<int> array, int sum){
    vector<int> ans;
    int length = array.size();
    if(length < 2)
        return ans;
    // 定义双指针
    int first = 0;
    int end = length - 1;
    while(first < end){
        if(array[first] + array[end] == sum){
            ans.push_back(array[first]);
            ans.push_back(array[end]);
            break;
        }
        else if(array[first] + array[end] > sum)
            end--;
        else if(array[first] + array[end] < sum)
            first++;
    }
    return ans;
}
原文地址:https://www.cnblogs.com/flyingrun/p/13556283.html