1. 概述
1.1 题目
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).
1.2 解题思路
这道题跟之前的3Sum问题很相似,就是求取数组中跟目标值最近的。在计算过程中将每一个可能的结果与目标值最接近的记录下来,最后便得到了需求的解。
2. 编码
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int len(nums.size()); //得到数组的长度
sort(nums.begin(), nums.end());
if(nums[0]==nums[len-1]) return 3*nums[0];
if(3 == len) return (nums[0]+nums[1]+nums[2]);
int min_sum(123456789), left(0), right(0),res(0);
for(int i=0; i<len-2; ++i)
{
int temp_target = target - nums[i];
left = i+1;
right = len-1;
while(left < right)
{
int sum = temp_target - nums[left] - nums[right];
if(sum == 0) return target;
if(sum > 0)
{
if(abs(sum)<abs(min_sum))
{
res = nums[left]+nums[right]+nums[i]; //记录与目标值最接近的值
min_sum = sum;
}
++left;
}
if(sum < 0)
{
if(abs(sum)<abs(min_sum))
{
res = nums[left]+nums[right]+nums[i];
min_sum = sum;
}
--right;
}
}
}
return res;
}
};