题目:
解答:
解法类似3SUM 看代码注释。
3sum那个题看4sum的代码比较标准。
代码:
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
vector<vector<int> > res;
int sum;
int targetSum;
int minNum = INT_MAX;
sort(num.begin(), num.end());
for (int i = 0; i < num.size(); i++)
{
//跳过重复元素
if (i != 0 && num[i] == num[i - 1])
continue;
int j = i+1;
int k = num.size() - 1;
//2sum
while (j < k)
{
//跳过重复元素
if (j != i + 1 && num[j] == num[j - 1])
{
++j;
}
//跳过重复元素
else if (k != num.size() - 1 && num[k] == num[k + 1])
{
--k;
}
else
{
sum = num[i] + num[j] + num[k];
//差值
int minus = sum - target;
//绝对值为0 直接返回
if (minus == 0)
return target;
//如果差值绝对值小于最小值 更新
if (abs(minus) < minNum)
{
targetSum = sum;
minNum = abs(minus);
}
//差值小于0 ++j 需要让整体变大
if (minus < 0)
++j;
//差值大于0 --k 需要让整体变小
else
--k;
}
}
}
return targetSum;
}
};