题目:
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).解题思路:
先将这个数组排序,然后循环遍历,每次固定第一个数,设置两个指针,计算三个数相加的结果,
如果绝对值比目标值小,则将前指针加1,如果大则将后指针减一。
代码:
public int threeSumClosest(int[] num, int target) {
int n = num.length;
if (n < 3)
return 0;
Arrays.sort(num);
int result = num[0] + num[1] + num[2] - target;
for (int i = 0; i < n - 2; i++) {//n-2是最后所剩的数不足3的时候
int begin = i + 1;
int end = n - 1;
while (begin < end) {
int gap = num[i] + num[begin] + num[end] - target;
if (gap == 0)
return target;
result = Math.abs(result) < Math.abs(gap) ? result : gap;
if (gap < 0)
begin++;
else
end--;
}
}
return result + target;
}