剑指offer---和为S的两个数字

题目:和为S的两个数字

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


例如:

输入数组{1, 2, 4, 7, 11, 15} 和数字15 

返回{4,11}


 

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        
    }
};

解题代码:

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int> res;
        // 边界处理
        if(array.size() == 0 || array.size() == 1)
            return res;
        if(sum < array[0])
            return res;

        int low = 0;
        int high = array.size()-1;
        while(low != high){
            if(array[low] + array[high] < sum)
                low++;
            else if(array[low] + array[high] > sum)
                high--;
            else
                break;
        }
        // 检查是否含有满足要求的元素
        if(low != high){
            res.push_back(array[low]);
            res.push_back(array[high]);
        }
        return res;
    }
};

 

posted on 2018-11-15 16:18  wangzhch  阅读(136)  评论(0编辑  收藏  举报

导航