题目描述:
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
解题思路:与leetcode15类似,首先对数组进行排序,在对数组进行遍历,每遍历一个值,便将其固定住,即为nums[i],在使用双指针,左指针指向下一个数nums[i+1],右指针指向最后一个数nums[nums.length-1],再根据三个数之和,判断与target的距离,如果更近则更新三个数。
public class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
//假设初始位置为0,1,2
int ans = nums[0]+nums[1]+nums[2];
//遍历数组,固定每个遍历过的值,设置双指针
for (int i=0;i<nums.length;i++){
int L =i+1;
int R =nums.length-1;
while (L < R){
//设置三个数的和为sum
int sum = nums[i] + nums[L] +nums[R];
//判断sum与target的绝对距离(通过绝对值进行判断),如果比ans所设置更近,则直接更新ans
if (Math.abs(target - sum) < Math.abs(target-ans)){
ans = sum;
}
if (sum > target){
R--;
}else if (sum < target){
L++;
}else {
return ans;
}
}
}
return ans;
}
}