Am trying to find the closest pair based on sum but am getting a
java.lang.ArrayIndexOutOfBoundsException: -1
Find a pair in array whose sum is closest to sum.
e.g.
Input: arr[] = {10, 22, 28, 29, 30, 40}, sum = 54
Output: 22 and 30
My solution:
import java.util.Arrays;
public class ArrayUtils {
public static int[] closestPairBasedOnSum(int[] arr, int sum) {
if (arr == null) {
return null;
}
if (sum < 1) {
return null;
}
int[] closestPair = new int[2];
int left = 0;
int right = arr.length - 1;
int diff = Integer.MAX_VALUE;
while (right > left) {
// this if is throwing the ArrayIndexOutOfBoundsException
if (Math.abs(arr[left] + arr[right] - sum) < diff) {
closestPair[0] = arr[left];
closestPair[1] = arr[right];
diff = Math.abs(arr[left] + arr[right] - sum);
}
if (arr[left] + arr[right] > sum) {
right--;
}
else {
left--;
}
}
System.out.println(Arrays.toString(closestPair));
return closestPair;
}
public static void main(String[] args) {
int [] arr = new int[] {10, 22, 28, 29, 30, 40};
int[] closestPair = ArrayUtils.closestPairBasedOnSum(arr, 54);
System.out.println(Arrays.toString(closestPair));
}
}
Outputs:
java.lang.ArrayIndexOutOfBoundsException: -1
Why is it not returning [22, 30]
?