题目描述
给你一个数组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; } };