题目:
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
Subscribe to see which companies asked this question
解题思路类似于leetcode15 3Sum,区别就在于将三个数之和为0的目标改为三个数之和与目标数字差的绝对值最小。
代码如下所示:
public class Solution {
public int threeSumClosest(int[] nums, int target) {
int n = nums.length;
int ans = Integer.MAX_VALUE;
int min = Integer.MAX_VALUE;
int sum ;
int curMin;
int p,q;
Arrays.sort(nums);
for(int i=0;i<n;i++){
if(i>0 && nums[i-1]==nums[i]) continue;
p=i+1;q=n-1;
while(p<q){
sum = nums[i]+nums[p]+nums[q];
curMin = Math.abs(target-sum);
if(sum==target){
return target;
}
else if(sum>target){
q--;
}
else{
p++;
}
if(curMin<min){
min=curMin;
ans=sum;
}
}
}
return ans;
}
}