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;
    }
}
Copyright © 2023 KIZLE. - All Rights Reserved.
Website by Kounik Maitra