给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
/*
思路:(前面做过三数之和这道题了,用差不多的方法做这道题)
1、先排序
2、设diff为三数之和与target之间的差
3、有三数之和的方法对其进行遍历
*/
// class Solution {
// public int threeSumClosest(int[] nums, int target) {
// int min = Integer.MAX_VALUE;
// int threeSum = 0;
// Arrays.sort(nums);
// for(int i = 0; i < nums.length-2; i++){
// int j = i+1;
// int k = nums.length-1;
// int currentMin = 0;
// //int currentThreeSum = 0;
// while(j < k){
// int currentThreeSum = nums[i] + nums[j] + nums[k];
// int diff = nums[i] + nums[j] + nums[k] - target;
// if(diff < 0){
// currentMin = Math.abs(diff);
// j++;
// }else if(diff > 0){
// currentMin = Math.abs(diff);
// k--;
// }else if(diff == 0){
// return nums[i] + nums[j] + nums[k];
// }
// if(currentMin < min){
// min = currentMin;
// threeSum = currentThreeSum;
// }
// }
// }
// return threeSum;
// }
// }
class Solution{
public int threeSumClosest(int[] nums, int target){
Arrays.sort(nums);
int closestSum = 0;
int diff = Integer.MAX_VALUE;
for(int i = 0; i < nums.length-2; i++){
int j = i + 1;
int k = nums.length - 1;
while(j < k){
int temp_sum = nums[i] + nums[j] + nums[k];
int temp_diff = Math.abs(temp_sum - target);
if(temp_diff < diff){
diff = temp_diff;
closestSum = temp_sum;
}
if(temp_sum > target){
k--;
}else if(temp_sum < target){
j++;
}else{return temp_sum;}
}
}
return closestSum;
}
}
这道题很好的考察了变量的作用域