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