剑指offer 和为S的两个数字

题目描述

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

输出描述:

对应每个测试案例,输出两个数,小的先输出。

注意:目前变量满足条件时,要记得将index值进行增减操作。进行所有操作后,最后得到的可能不满足要求,所以最后返回的时候要对结果进行判断看是否满足要求。

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        if(array.size() == 0){
            return {};
        }
        
        int begin = 0,end = array.size() - 1;
        int tmp = 0;
        int resSmall = 0,resBig = 0;
        int Min = INT_MAX;
        while(begin < end){
            tmp = array[begin] + array[end];
            if(tmp == sum){
                int mul = array[begin] * array[end];
                if(mul < Min){
                    Min = mul;
                    resSmall = array[begin];
                    resBig = array[end];
                }
                ++begin;
            }
            if(tmp > sum){
                --end;
            }
            if(tmp < sum){
                ++begin;
            }
        }
       
        vector<int> result;
        if(resSmall + resBig == sum){
            result.push_back(resSmall);
            result.push_back(resBig);
        }
        return result;
        
    }
};
 
原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7496389.html