最接近的三数之和
给你一个长度为 n
的整数数组 nums
和 一个目标值 target
。请你从 nums
中选出三个整数,使它们的和与 target
最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
示例1
输入: nums = [-1,2,1,4],target=1
输出: 2
解释: 与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
示例2
输入: [0,0,0],target=1
输出: 0
分析:
首先将数组按照升序排序,然后使用双指针,一个指向数组的起点位置,一个指向数组的末尾位置,同时使用一个变量记录当前最接近目标值的三个数的和。然后在指针移动的过程中,不断更新最接近目标值的三个数的和,直到双指针重合为止。
class Solution {
public int threeSumClosest(int[] nums, int target) {
int len=nums.length;
Arrays.sort(nums);
int l,r;
int cnt=nums[0]+nums[1]+nums[2];
int sum;
for(int s=0;s<len;s++){
if(cnt==target){
break;
}
l=s+1;
r=len-1;
while(l<r){
sum=nums[s]+nums[l]+nums[r];
if(Math.abs(sum-target)<Math.abs(cnt-target)){
cnt=sum;
}else if(sum < target){
l++;
}else if(sum >target){
r--;
}else{
break;
}
}
}
return cnt;
}
}