class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int n=nums.size();
int closest=nums[0]+nums[1]+nums[2];
sort(nums.begin(),nums.end());
for(int p=0;p<n-2;++p){
if(p>0&&nums[p]==nums[p-1]) continue;
int left=p+1;
int right=n-1;
while(left<right){
int m=nums[left]+nums[p]+nums[right];
if(abs(closest-target)>abs(m-target)){
closest=m;
}
if(m==target){
return target;
}else if(m<target){
left++;
while(left<right&&nums[left]==nums[left-1]){
left++;
}
}else{
right--;
while(left<right&&nums[right]==nums[right+1]){
right--;
}
}
}
}
return closest;
}
};