暴力解法O(N^3)
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int n = nums.size();
int minAbs = INT_MAX;
int ans;
for (int first = 0; first < n; first++)//第一重循环
{
if (first > 0 && nums[first] == nums[first - 1])
continue;//判断是否开始第二重循环
for (int second = first + 1; second < n-1; second++)
{
int third = n - 1;
if (second > first + 1 && nums[second] == nums[second - 1])
continue;//判断是否开始第三重循环
if (nums[first] + nums[second] + nums[third] > target)
{
while (third > second && (nums[first] + nums[second] + nums[third] > target))
{
--third;
}
int curans = nums[first] + nums[second] + nums[third + 1];
if (abs(curans - target) < minAbs)
{
ans = curans;
minAbs = abs(curans - target);
}
if (third > second)
{
int nextans = nums[first] + nums[second] + nums[third];
if (abs(nextans - target) < minAbs)
{
ans = nextans;
minAbs = abs(nextans - target);
}
}
}
else if (nums[first] + nums[second] + nums[third] == target)
return target;
else
{
int curans = nums[first] + nums[second] + nums[third];
if (abs(curans - target) < minAbs)
{
ans = curans;
minAbs = abs(curans - target);
}//进入下一个second
}
}
}
return ans;
}
};