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

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        //vector<int> temp;
        vector<int> result;
        int len = array.size();
        int i = 0,j = 0;
        for(i = 0,j = len - 1;i < len && j > i;)
        {
            if(array[i] + array[j] == sum)
            {
                result.push_back(array[i]);
                result.push_back(array[j]);
                return result;
            }
            else if(array[i] + array[j] > sum)
                j--;
            else
                i++;
        }
        return result;
    }
};

思路:这道题有时候容易钻牛角尖,我本来想的是另外一种方法,结果被卡在题目里面了,钻不出来。                                          其实虽然有一个乘积最小的限制,但是题目要求是排过序的,还是递增排序,所以头尾相加是最快的方法,第一组遇到的和sum相等的值就一定是乘积最小的(和相同,差越大,乘积就越小),大了就大值往前移动,小了就小值往后移动,一定要注意在中间有一个return,不然就会把所有和为sum的值打印出来。

猜你喜欢

转载自blog.csdn.net/daiyun_102474/article/details/81673944