代码
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
int res = 0;
int size = num.size();
sort(num.begin(), num.end());
int minDif = num[0] + num[1] + num[2] - target;
for(int i = 0; i < size-2; ++i)
{
int cur = threeSumClosestHelper(num, target-num[i], i+1);
if(abs(cur)<abs(minDif))
minDif = cur;
}
return target + minDif;
}
int threeSumClosestHelper(vector<int> num, int target, int start)
{
int minDif = num[start] + num[start+1] - target;
int l = start;
int r = num.size()-1;
while(l<r)
{
if(num[l]+num[r]==target)
return 0;
int dif = num[l] + num[r] - target;
if(abs(dif)<abs(minDif))
minDif = dif;
if(num[l]+num[r]>target)
--r;
else
++l;
}
return minDif;
}
};