和为s的两个数

题目描述

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

思路

首尾两个标记,head和behind,如果head与behind和等于s,则找到,同时比较是否乘积最小;如果和小于s,则head后移;如果和大于s,则behind前移。
具体见code

code

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int> pairsSum;
        if(array.size()<=1)
            return pairsSum;
        int head=0;
        int behind=array.size()-1;
        int pairtimes;
        while(head<behind)
        {
            int sumtmp=array[head]+array[behind];
            int timestmp=array[head]*array[behind];
            if(sumtmp==sum)
            {
                if(pairsSum.size()<=0)
                {
                    pairtimes=timestmp;
                    pairsSum.push_back(array[head]);
                    pairsSum.push_back(array[behind]);
                }else if(timestmp<pairtimes){
                    pairtimes=timestmp;
                    pairsSum.clear();
                    pairsSum.push_back(array[head]);
                    pairsSum.push_back(array[behind]);
                }else
                    head++;
            }
            if(sumtmp<sum)
                head++;
            if(sumtmp>sum)
                behind--;
        }
        return pairsSum;
    }
};

猜你喜欢

转载自blog.csdn.net/ytang_/article/details/79905391
今日推荐