/*
* @lc app=leetcode id=16 lang=cpp
*
* [16] 3Sum Closest
*/
// @lc code=start
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int N = nums.size();
sort(nums.begin(),nums.end());
int mn = 10005;
int df = 0;
for(int i=0;i<N;i++){
int j = i+1;
int k = N-1;
while(j<k){
int sum = nums[i] + nums[j] + nums[k];
if(abs(sum - target) < mn){
mn = abs(sum - target);
df = sum - target;
}
if(sum > target){
k--;
}else if(sum < target){
j++;
}else{
return target;
}
}
while( i+1<N && nums[i+1] == nums[i]) i++;
}
return df+target;
}
};
// @lc code=end