题目描述
本题知识点: 数学 数组 双指针
解答
从知识点中看出可以用双指针,因为是递增序列,所以一个指针从小指,另一个从尾指(可以用vector.end()获取尾指针),从后判断,如果头指针和尾指针之和小于指定n,则将头指针后移一位,重复,如果有多组,用a和b记录乘积最小的,m记录乘积。
但下面代码有一个问题就是会重复遍历。
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> result;
int a=0,b=0;
long m=array[array.size()-1]*array[array.size()-2];
for(vector<int>::iterator ft=array.begin();ft!=array.end();ft++){
for(vector<int>::iterator bk=array.end();bk!=array.begin();bk--){
if((*ft)+(*bk)==sum){
if((*ft)*(*bk)<m){
a=*ft;
b=*bk;
m=(*ft)*(*bk);
}
}
}
}
if(a==0 && b==0)
return result;
if(a>b){
result.push_back(b);
result.push_back(a);
}
else{
result.push_back(a);
result.push_back(b);
}
return result;
}
};