Friday, 20 March 2015

Q. You are given an array of integers, containing both +ve and -ve numbers. You need to find the two elements such that their sum is closet to zero.

                                    package com.manish;

                                    import java.util.Arrays;

                                    public class MinTest

                                      {

                                            public static void main(String[] args)

                                              {

                                                   int arr[]=new int[]{5,3,1,-8,-8,6};

minSum(arr);

                                              }

                                            public static void minSum(int arr[])

                                              {

                                                  int l, r , min_sum,min_left,min_right,tempsum = 0;

                                                   if(arr.length<2)

                                                   {

                                                        System.out.println("invalid input");

                                                    }

                                                    Arrays.sort(arr);

                                                   l=0;r=arr.length-1;

                                                  min_sum=arr[l]+arr[r];

                                                  min_left=l;

                                                  min_right=r;

                                                   while(l<r)

                                                     {

                                                        tempsum=arr[l]+arr[r];

                                                        if(Math.abs(tempsum) < Math.abs(min_sum))

                                                           {

min_left=l;

                                                                min_right=r;

                                                                min_sum=tempsum;

                                                             }

                                                        if(tempsum < 0) l++;

                                                        else r--;

                                                      }

                                                  System.out.println(arr[min_left]+" "+arr[min_right]);

}

                                   }

  

No comments:

Post a Comment