同LeetCode15
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int min_closest = ~(1 << 31);
int res = 0;
int i = 0;
while (i < nums.size())
{
int goal = -(nums[i] - target);
int j = i + 1;
int k = nums.size() - 1;
while (j < k)
{
if (nums[j] + nums[k] == goal)
{
return target;
}
else if (nums[j] + nums[k] < goal)
{
if (min_closest > abs(nums[i] + nums[j] + nums[k] - target))
{
min_closest = abs(nums[i] + nums[j] + nums[k] - target);
res = nums[i] + nums[j] + nums[k];
}
while (nums[++j] == nums[j - 1]);
}
else
{
if (min_closest > abs(nums[i] + nums[j] + nums[k] - target))
{
min_closest = abs(nums[i] + nums[j] + nums[k] - target);
res = nums[i] + nums[j] + nums[k];
}
while (nums[--k] == nums[k + 1]);
}
}
while (nums[++i] == nums[i - 1]);
}
return res;
}
};