查找成对乘积的最大和

时间:2020-06-06 15:28:31

标签: java

我正在解决Java中的一个问题,其中我必须找到2个整数数组的最大成对乘积。

示例:

array 1 -> [1, 3, -5]
array 2 -> [-2, 4, 1]

output: 23            // (3 * 4) + (1 * 1) + (-5 * -2)

我的当前代码也会产生此输出。

我的解决方案

对两个数组进行排序,然后将两个数组中相同索引处的数字相乘,然后将每个对的乘积相加。

问题

我的解决方案是使用我不知道的测试用例进行测试的。我的解决方案无法通过所有测试用例。我不确定是否有任何输入会使我的解决方案失败。

问题

我给定问题的解决方案出了点问题,导致我的代码无法通过所有测试用例吗?

代码

private static long maxSum(int[] a, int[] b) {
    long result = 0;

    Arrays.sort(a);
    Arrays.sort(b);

    for (int i = a.length - 1; i >= 0; i--) {
        result += a[i] * b[i];
    }

    return result;
}

问题描述

enter image description here

1 个答案:

答案 0 :(得分:1)

我想我知道问题出在哪里,如果无法联系法官,我将无法确定。考虑以下情况:a[i] = 10^5b[i] = 10^5(问题中允许的最大值,现在为a[i] * b[i] = 10^10)。由于ab是整数类型,因此中间结果将存储为整数。由于数字10 ^ 10超出int的限制,因此会溢出。

要解决此问题,可以将数组值转换为long值。

result += Long.valueOf(a[i]) * Long.valueOf(b[i]);