先把数组排序,然后再暴力的求结果。暴力循环的过程中,如果出现这个情况,可以提前break,进入下一轮循环。
当计算的和与 target 的差越来越大的时候,就不用再进行后续的计算了。换一个数,重新再来
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int nearestSum = -1;
int nearestdif = Integer.MAX_VALUE;
for (int i = 0; i < nums.length; ++i) {
for (int j = i + 1; j < nums.length; ++j) {
int base = nums[i] + nums[j];
int dif = Integer.MAX_VALUE;
for (int k = j + 1; k < nums.length; ++k) {
int sum = base + nums[k];
int curDif = Math.abs(target - sum);
if (curDif <= dif) {
if (curDif < nearestdif) {
nearestSum = sum;
nearestdif = curDif;
}
dif = curDif;
} else {
break;
}
}
}
}
return nearestSum;
}
}