Java 根据总和查找最接近的对是 ArrayIndexOutOfBoundsException

标签 java arrays algorithm

我试图根据总和找到最接近的对,但得到一个

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
<小时/>

我的解决方案:

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));
    }
}
<小时/>

输出:

java.lang.ArrayIndexOutOfBoundsException: -1
<小时/>

为什么不返回[22, 30]

最佳答案

找到解决方案:

 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) {

        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;
}

关于Java 根据总和查找最接近的对是 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60840308/

相关文章:

java - 无法从 Yahoo IMAP 帐户删除邮件

java - 如何在jsp中找到第一个请求

c - "Error: expected expression before ‘int’ "and "错误 : expected ‘;’ , ‘,’ 或 ‘)’ 之前 ‘int’ "

java - 使用另一个数组中的运算符计算数组的值

java - 使用\n 作为分隔符打印一个额外的空行

java - 在spring mongodb中索引复合对象

arrays - 如何编辑我的函数并添加参数数组?

仅使用插入缺失的全局多序列比对算法

javascript - 帮助我改进我的基本点对点移动动画算法

java - 查看谁赢得井字游戏的最佳算法