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.
import
java.util.Arrays;
/**
* Class to find the pair
whose sum closer to zero.
* @author
rajesh.kumar
*/
public class
SumClosestToZero {
public static void
main(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 void
getPairWithCloserToZeroSum(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