题目描述
给你一个数组nums,和目标值target。从nums选出3个数,使这3个数的和最接近target,返回这三个数的和。
解题思路
本题和3数之和一样(但这个可以不用去重)。固定一个数,然后双指针找其他两个数。
在遍历的过程中,找到最接近target的3元组。
如何移动两个指针呢?——看具体的代码实现。
代码
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int n=nums.size();
int ret=0;
//差值
int dif=INT_MAX;
for(int i=0;i<n;i++)
{
int l=i+1,r=n-1;
while(l<r)
{
//更新和,差值
int sum=nums[l]+nums[r]+nums[i];
int d=sum-target;
if(abs(d)<dif)
{
ret=sum;
dif=abs(d);
}
//如何移动
if(d>0) r--;
else if(d<0) l++;
else return target;
}
}
return ret;
}
};