题目描述
题目描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
解题思路
与算法精讲-leetcode15-三数之和为0解题思路相同,请参考。
代码示例
public class Test {
public static void main(String[] args) {
int[] ints = {-1, 2, 1, -4};
int target = 1;
Integer s = threeSumClosest(ints, target);
if (s != null){
System.out.println("结果为:"+s);
}else {
System.out.println("参数错误");
}
}
private static Integer threeSumClosest(int[] ints, int target) {
if (ints == null && ints.length < 3){
return null;
}
//取三个数初始化默认值
int ans = ints[0] + ints[1] + ints[2];
Arrays.sort(ints);
for (int i = 0; i < ints.length; i++){
int start = i + 1;
int end = ints.length - 1;
while (start < end){
int temp = ints[i] + ints[start] +ints[end];
if (Math.abs(ans-target) > Math.abs(temp- target)){
ans = temp;
}
//向中间靠拢
if (temp>0){
end--;
}else if (temp<0){
start++;
}else {
//如果temp == 0,则返回即可
return temp;
}
}
}
return ans;
}
}