如何编写一个方法,应该找到数组中的一个三元组(不一定彼此相邻),其乘积为最大[关闭]

问题描述 投票:0回答:1

一个静态方法,接收一个充满整数的 arr 数组作为参数,(正数和负数,没有 零)。 该方法应该在数组中找到一个三元组(不一定彼此相邻),其乘积为 是最大值。该方法将返回最大乘积。 数组中的数字可以全为负数,也可以全为正数,也可以同时为正数和负数。结果应该没有绝对值,但得到最高的乘积结果。 如果数组小于 3,该方法应返回值 VALUE_MIN.Integer。 可以假设数组不为空。 方法签名是: 公共静态 int maxMult3 (int [] arr) 您编写的方法应该尽可能高效,同时考虑到时间的复杂性以及地点的复杂性 我没试过不知道如何开始

java arrays product
1个回答
0
投票

您可以记录 3 个最大的数字和 2 个最小的数字,可用于最终计算结果。

public static int maxMult3(int[] arr) {
    if (arr.length < 3) return Integer.MIN_VALUE;
    int[] min = new int[2], max = new int[3];
    Arrays.fill(min, Integer.MAX_VALUE);
    Arrays.fill(max, Integer.MIN_VALUE);
    for (int x : arr) {
        if (x < min[0]) {
            min[1] = min[0];
            min[0] = x;
        } else if (x < min[1]) min[1] = x;
        for (int i = 0; i < max.length; i++) {
            if (x > max[i]) {
                for (int j = max.length - 1; j > i; j--) max[j] = max[j - 1];
                max[i] = x;
                break;
            }
        }
    }
    return Math.max(max[0] * max[1] * max[2], max[0] * min[0] * min[1]);
}
© www.soinside.com 2019 - 2024. All rights reserved.