Given an array nums of n integers and an integer target, find three
integers in nums such that the sum is closest to target. Return the
sum of the three integers. You may assume that each input would have
exactly one solution.Example:
Given array nums = [-1, 2, 1, -4], and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
3个数求和系列,基本思路就是先对数组排序,循环一个数,判断另外两个数字的和与 target-第一个数字的差绝对值。
int threeSumClosest(vector<int>& nums, int target) {
int n = nums.size();
if( n < 3)
return 0;
sort(nums.begin(),nums.end());
int min_gap = INT_MAX;
int _min = 0;
for(int i = 0;i < n - 2;i++)
{
int left = i + 1;
int right = n - 1;
int sum = target - nums[i];
while(left < right)
{
if(nums[left] + nums[right] == sum)
{
return target;
}
int tmp = nums[i] + nums[left] + nums[right];
if(abs(tmp - target) <= min_gap)
{
min_gap = abs(target - tmp);
_min = tmp;
}
if(nums[left] + nums[right] > sum)
{
right--;
}
else
{
left++;
}
}
}
return _min;
}