08-三数最大乘积
2026/9/27小于 1 分钟
问题描述
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入:nums = [1,2,3]
输出:6
示例 2:
输入:nums = [1,2,3,4]
输出:24
示例 3:
输入:nums = [-1,-2,-3]
输出:-6问题解决
先排序排序后:
- 2个最大负数 * 最大的整数:[-8,-7,-1,4,5]、[-8,-7,4,5]
- 3个最大的数的乘积:[-7,4,5]、[4,5,7]
public class ThreeMaxMultiplication {
public static void main(String[] args) {
int[] arr = {-1,-3,-2,5,8};
System.out.println(getThreeMaxMultiplicationTwo(arr));
}
public static int getThreeMaxMultiplication( int[] arr){
// 排序
Arrays.sort(arr);
int prevSum = arr[0] * arr[1] * arr[2];
int suffixSum = arr[arr.length-1] * arr[arr.length-2] * arr[arr.length-3];
return Math.max(prevSum,suffixSum);
}
// 线性标记s
public static int getThreeMaxMultiplicationTwo( int[] arr){
int min1 = Integer.MAX_VALUE;
int min2 = Integer.MAX_VALUE;
int max1 = Integer.MIN_VALUE;
int max2 = Integer.MIN_VALUE;
int max3 = Integer.MIN_VALUE;
for (int num : arr) {
if(num < min1){
min2 = min1;
min1 = num;
}else if(num < min2){
min2 = num;
}
if(num > max1){
max3 = max2;
max2 = max1;
max1 = num;
}else if(num > max2){
max3 = max2;
max2 = num;
} else if(num > max3){
max3 = num;
}
}
return Math.max(min1 * min2 * max1,max1 * max2 * max3);
}
}