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

Posted Tech Memo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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;
    }
};

 

以上是关于剑指offer---和为S的两个数字的主要内容,如果未能解决你的问题,请参考以下文章

[剑指offer]面试题41:和为s的两个数字VS和为s的连续正数序列

[剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列

剑指offer 和为s的两个数字

剑指OFFER 和为S的两个数字

剑指offer-和为s的俩个数字

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

(c)2006-2024 SYSTEM All Rights Reserved IT常识