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

时间:2022-06-30 20:59:02

题目描述

输入一个递增排序的数组和一个数字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;
}
};