class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if (nums.size() < 3) return 0;
int closest = nums[0] + nums[1] + nums[2];
sort(nums.begin(), nums.end());
for(int i = 0; i < nums.size() - 2; i++) {
if (i > 0 && nums[i] == nums[i-1]) continue;
int sec = i + 1;
int thir = nums.size() - 1;
while(sec < thir) {
int cur = nums[i] + nums[sec] + nums[thir];
if (cur == target) return cur;
if (abs(target - cur) < abs(target - closest)) {
closest = cur;
}
if (cur > target)
--thir;
else
++sec;
}
}
return closest;
}
};