题目描述:
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
public int threeSumClosest(int[] nums, int target) {
if (nums.length < 3) {
return -1;
}
if (nums.length == 3) {
return nums[0] + nums[1] + nums[2];
}
Arrays.sort(nums);
int len = nums.length;
int min = Integer.MAX_VALUE;
int result = 0;
for (int i = 0; i < len; i++) {
int start = i + 1;
int end = len - 1;
while (start < end) {
int temp = nums[i] + nums[start] + nums[end];
if (temp > target) {
end--;
} else {
start++;
}
int res = Math.abs(temp - target);
if (res < min) {
result = temp;
min = res;
}
}
}
return result;
}