和为S的两个数

2020-06-21  本文已影响0人  UAV

题目描述

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

输出描述

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

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array, int sum) {
        vector<int> result;
        //用来存储两个数字
        int num1 = 0, num2 = 0;
        //用来保存两个数字的乘积
        int product = INT_MAX;
        int i = 0, j = array.size() - 1;
        while (i < j)
        {
            //两个数字求和  ,两个数字求积,如果符合要求更新连个数字的最小乘积
            if ((array[i] + array[j] == sum) && (array[i] * array[j] < product)) {
                num1 = array[i];
                num2 = array[j];
                product = num1*num2;
            }
            else if (array[i] + array[j] > sum) {
                j--;
            }
            else
            {
                i++;
            }
        }//如果找到两个数的乘积为S
        if (product < INT_MAX) {
            result.push_back(num1);
            result.push_back(num2);
        }
        return result;
    }
};
上一篇下一篇

猜你喜欢

热点阅读