/*本题与3Sum类似,也可以采取先排序,然后左右夹逼的方式。
不过,此处求的是与target最接近的和,即不断更新最小值即可。
方法参考自:https://github.com/soulmachine/leetcode*/
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
sort(num.begin(), num.end());
int min_dif(INT_MAX);
int sum(0);
for(int i = 0; i < num.size() - 2; ++i){
int j(i + 1), k(num.size() - 1);
while(j < k){
const int tmp_sum(num[i] + num[j] + num[k]);
if(abs(tmp_sum - target) < min_dif){
sum = tmp_sum;
min_dif = abs(tmp_sum - target);
}
if(tmp_sum < target) ++j;
else --k;
}
}
return sum;
}
};