This problem is also called minimum absolute sum pair.
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 closest to zero.
importjava.util.Arrays;
/**
* Class to find the pair whose sum closer to zero.
* @authorrajesh.kumar
*/
public classSumClosestToZero {
public static voidmain(String[] args) {
int[] array = {10,12,14,16,-8,10,18,19,7,-6};
getPairWithCloserToZeroSum(array);
}
/**
* Method to print the pair.
* @param array
*/
private static voidgetPairWithCloserToZeroSum(int[] array) {
Arrays.sort(array);
int length = array.length;
if(length==0 || length==1) {
System.out.println("No pair exists !!");
}
int i = 0;
int j = length -1;
int minSum = array[i] + array[j];
int minL = i; int minR= j;
while (i < j) {
int sum = array[i] + array[j] ;
/* If sum of the elements at index i and j equals 0 */
if (Math.abs(minSum)>Math.abs(sum)) {
minSum = sum;
minL = i;
minR = j;
} else if(sum<0) {
i++;
} else {
j--;
}
}
System.out.println("Pair is"
+array[minL]+","+array[minR]+")");
}
}
No comments:
Post a Comment