和Leetcode15题类似
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int ans = 99999999 + target, kk;
sort(nums.begin(), nums.end());
for (int i = 0; i + 2 < nums.size(); ++i) {
if (i > 0 && nums[i] == nums[i - 1]) continue;
int l = i + 1, r = nums.size() - 1, sum = -nums[i] + target;//第一个元素
while (l < r) {//找二元组,使第一个元素和二元组和为0
while (l<r && nums[r] + nums[l] > sum) --r;
if (l < r) {//匹配的情况
kk = nums[i] + nums[r] + nums[l];
if (abs(kk - target) < abs(ans - target)) ans = kk;
if (r != nums.size() - 1) kk = nums[i] + nums[r + 1] + nums[l];
if (abs(kk - target) < abs(ans - target)) ans = kk;
}
else {
kk = nums[i] + nums[l + 1] + nums[l];
if (abs(kk - target) < abs(ans - target)) ans = kk;
}
if (nums[l] == nums[r]) break;
while (l < r && nums[l] == nums[l + 1]) ++l;
++l;
}
}
return ans;
}
};