原题链接:Leecode 16. 最接近的三数之和
与上一题Leecode 15. 三数之和 的思想类似,都是排序+双指针解决问题。
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int n=nums.size();
sort(nums.begin(),nums.end());
int ans=nums[0]+nums[1]+nums[2];
for(int i=0;i<n;i++)
{
int l=i+1,r=n-1;
if(i>0 && nums[i]==nums[i-1])
continue;//去重
while(l<r)
{
int tmp=nums[i]+nums[l]+nums[r];
if(abs(tmp-target)<abs(ans-target))
ans=tmp;
if(tmp>target)
r--;
else if(tmp<target)
l++;
else
return ans;
}
}
return ans;
}
};