欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《剑指offer》-递增数组中找到和为S的(最小)两个元素

程序员文章站 2024-03-15 20:11:42
...

题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。

首先一个坑是,返回值的问题。题目描述说返回两个数字,并且小的在前面,大的在后面。
C++的返回值明明只有一个啊?那就要放到数组或者其他容器里面,或者作为一个对象返回。。本题中使用vector容器进行存储。

其次容易想到两边夹的方法,直接写就好了

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> a,int sum) {
        int i=0, j=a.size()-1;
        vector<int>res;
        while(i<j){
            int t = a[i] + a[j];
            if(t==sum){
                res.push_back(a[i]);
                res.push_back(a[j]);
                break;
            }
            if(t<sum){
                i+=1;
            }else{
                j-=1;
            }
        }
        return res;
    }
};