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).
public class Solution {
public int threeSumClosest(int[] nums, int target) {
long mindiff = Long.MAX_VALUE;
long closet = 0;
Arrays.sort(nums);
for(int i=0;i<nums.length-2;i++)
{
int start = i+1,end =nums.length-1;
while(start<end)
{
long sum = nums[i] + nums[start] + nums[end];
long newdiff = Math.abs(sum-target);
if(newdiff == 0)
return (int)sum;
if(newdiff<mindiff)
{
mindiff = newdiff;
closet = sum;
}
if(sum>target)
end--;
else if(sum<target)
start++;
}
}
return (int)closet;
}
}