Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
与3Sum极为类似。只是处理时判断哪个更靠近。靠近即距离,需绝对值!!
int threeSumClosest(vector<int> &num, int target)
{
if(num.size() < 3) return INT_MAX;
int min_gap = INT_MAX;
sort(num.begin(),num.end());
for(int i = 0;i <= num.size()-3;i++)
{
if(i > 0 && num[i] == num[i-1])continue;//前面计算过直接跳过
int left = i+1;
int right = num.size() -1 ;
while(left < right)
{
int sum = (num[i] + num[left] + num[right] );
min_gap = abs(sum - target) < abs(min_gap)?sum - target:min_gap ;//关键!比较最小距离
if(sum == target)
{
return target;
}
else if(sum > target )
{
right--;
}
else
{
left++;
}
}
}
return min_gap + target;
}