和为s的数字

输入一个递增排序的数组和一个数字S,在数组中查找两个数,

使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

1.自己用迭代器两个指针做的



1.left开头right指向结尾
2.如果和小于sum,说明太小了left右移寻找更的数
3.如果和大于sum,说明太大了right左移寻找更的数
4.和相等把left和right的数返回

vector<int> FindNumbersWithSum(vector<int> & array,int sum) {
 vector<int> res;

if(array.empty())
    return res;

vector<int>:: iterator start=array.begin();

vector<int>:: iterator end=array.end()-1;

while (start<end)
{

    if((*start)+(*end)==sum)
    {
        res.push_back(*start);
        res.push_back(*end);
        return  res;
    }
    else if((*start)+(*end)<sum)
    {
        start++;
    }
    else if((*start)+(*end)>sum)
    {
        end--;
    }

}

return res;

}

2牛客上 容器下标做

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int> result;
        int length = array.size();
        int start = 0;
        int end = length - 1;
        while (start < end)
        {
            if (array[start] + array[end] == sum)
            {
                result.push_back(array[start]);
                result.push_back(array[end]);
                break;
            }
            else if (array[start] + array[end] < sum)
                start++;
            else
                end--;
        }
        return result;
    }
};

 

 

 

posted @ 2019-08-29 09:57  高颖1995  阅读(218)  评论(0编辑  收藏  举报