class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
int min = 10000;
int result,sum,sumx;
sort(num.begin(),num.end());
for(int i = 0;i < num.size();i ++){
int m = i + 1,n = num.size() - 1;
while(m < n){
sum = num[i] + num[m] + num[n];
sumx = abs(sum - target);
if(sumx < min){
min = sumx;
result = sum;
}
if(sum - target < 0)
m ++;
else if(sum - target > 0)
n --;
else
return target;
}
}
return result;
}
};
当然了,可以对上面的代码进行下优化,跳过重复值的计算。
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
int min = 10000;
int result,sum,sumx;
sort(num.begin(),num.end());
for(int i = 0;i < num.size();i ++){
while(i > 0 && num[i] == num[i - 1])
i ++;
int m = i + 1,n = num.size() - 1;
while(m < n){
sum = num[i] + num[m] + num[n];
sumx = abs(sum - target);
if(sumx < min){
min = sumx;
result = sum;
}
if(sum - target < 0)
m ++;
else if(sum - target > 0)
n --;
else
return target;
while(m > i + 1 && num[m] == num[m - 1])
m ++;
while(n < num.size() - 1 && num[n] == num[n + 1])
n --;
}
}
return result;
}
};
三数之和最接近目标值
本文介绍了一个解决三数之和最接近目标值问题的算法实现,并提供了两种优化方案,通过排序和跳过重复值来提高效率。
212

被折叠的 条评论
为什么被折叠?



