给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
力扣16题https://leetcode-cn.com/problems/3sum-closest
这道题的思路与三数之和较为相似,可以通过固定一个数,移动两个数的方式来解决,需要注意的是指针的移动方式,如果三个数之和比target小,就需要向右移动增大三个数的和,反之则应该减小三个数·的和。
class Solution {
public int threeSumClosest(int[] nums, int target) {
if(nums.length==3) return nums[0]+nums[1]+nums[2];//如果数组长度为三就直接返回
Arrays.sort(nums);
int min=nums[0]+nums[1]+nums[2];
int min_abs=Math.abs(min-target);
int n=nums.length;
int x=0,y=0,z=0;
for (x=0;x<n;x++){
z=n-1;
y=x+1;
while (y<z){
int a=nums[x]+nums[y]+nums[z];
if (Math.abs(a-target)<min_abs){
min_abs=Math.abs(a-target);
min=a;
}
if (a>target) z--;
else if (a<target) y++;
else return target;
}
}
return min;
}
}