一 题目描述
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
二 解题思路
这道题其实跟threeSum的另一个变体,与此不同是不用去重,且如果没有等于target的值,找最接近的一个值,所以我们需要维持一个最小值min的变量
三 代码实战
public static int threeSumClosest(int[] nums, int target) {
if(nums.length<3){
return 0;
}
Arrays.sort(nums);
int subVar = Integer.MAX_VALUE;
int min = 0;
for(int i =0;i<nums.length-1;i++){
int lowIndex = i+1;
int hinghIndex = nums.length-1;
while (lowIndex<hinghIndex){
int threeSum = nums[i]+nums[lowIndex]+nums[hinghIndex];
if(Math.abs(target-threeSum)<subVar){
subVar = Math.abs(target-threeSum);
min=threeSum;
}
if(threeSum==target){
return min;
}else if(threeSum>target){
hinghIndex--;
}else {
lowIndex++;
}
}
}
return min;
}