枚举+二分搜索
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int n=nums.size();
int i,j,k;
int ans=nums[0]+nums[1]+nums[2];
sort(nums.begin(),nums.end());
for(i=0;i<=n-3;i++)
{
if(i>0&&nums[i]==nums[i-1])
continue;
for(j=i+1,k=n-1;j<k;)
{
if(j>i+1&&nums[j]==nums[j-1])
{
j++;
continue;
}
if(k<n-1&&nums[k]==nums[k+1])
{
k--;
continue;
}
int d=nums[i]+nums[j]+nums[k];
if(d==target)
return d;
else if(d>target)
k--;
else
j++;
if(abs(d-target)<abs(ans-target))
ans=d;
}
}
return ans;
}
};