14. 3 Sum Closest
Topic :
arrays
Difficulty :
medium
Problem Link :
problem statement
Given an integer array nums
of length n
and an integer target
, find three integers in nums
such that the sum is closest to target
.
Return the sum of the three integers.
You may assume that each input would have exactly one solution.
Example 1:
Input: nums = [-1,2,1,-4], target = 1
Output: 2
Explanation: The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
Example 2:
Input: nums = [0,0,0], target = 1
Output: 0
Explanation: The sum that is closest to the target is 0. (0 + 0 + 0 = 0).
Constraints:
3 <= nums.length <= 500
-1000 <= nums[i] <= 1000
-104 <= target <= 104
solution
import java.io.*;
import java.util.*;
class ThreeSumClosest
{
public static void main(String args[])
{
int nums[]={-1,2,1,-4};
int target=1;
System.out.println(threeSumClosest(nums,target));
}
static int threeSumClosest(int[] nums, int target)
{
int n=nums.length;
Arrays.sort(nums);
// we will consider the first 3 numbers are closest to our target
int sum=nums[0]+nums[1]+nums[2];
//3 sum approach
for(int i=0;i<n-2;i++)
{
int low=i+1;
int high=n-1;
while(low<high)
{
int temp=nums[i]+nums[low]+nums[high];
// if diff between temp and target is less than sum and target
//then temp can be a possible ans so we update the sum
if(Math.abs(temp-target) < Math.abs(sum-target) )
sum=temp;
if(temp>target) high--;
else if(temp<target) low++;
else return target;
}
}
return sum;
}
}