import java.util.Arrays;
/**
* @author: Arbicoral
* @Description: 求数组中三个数的乘积,要求输出最大的乘积
*
* 分析可能出现的情况
* 1. 数组全是正数 ----> 找出数组中最大的三个数返回乘积即可
* 2. 数组全是负数 ----> 找出数组中最大的三个数返回乘积即可
* 3. 数组有正数,有负数 ----> 可能最大的三个数是正数,也可能最大的里面有负数,所以需要找到最大的三个正数和最小的两个数,返回(最大的三个数的乘积 和 最大的一个跟最小的2个的乘积)两个中最大的即可
*/
public class ThreeNumsMultiply {
public static void main(String[] args) {
System.out.println(fun1(new int[]{1,2,3,4,5,6}));
System.out.println(fun2(new int[]{1,2,3,4,5,6}));
}
// 时间复杂度 n
private static int fun2(int[] nums) {
// 遍历一遍数组找到需要的五个值
int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;
int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
for (int i: nums){
// 找最小的2个数
if (i < min1){
min2 = min1;
min1 = i;
} else if (i < min2) {
min2 = i;
}
// 找最大的三个数
if (i > max1){
max3 = max2;
max2 = max1;
max1 = i;
} else if (i > max2) {
max3 = max2;
max2 = i;
} else if (i > max3) {
max3 = i;
}
}
return Math.max(max1*max2*max3, min1*min2*max1);
}
// 时间复杂度 nlogn
private static int fun1(int[] nums) {
// 排序后得到最大的三个值
Arrays.sort(nums);
int n = nums.length;
return Math.max(nums[n-1]*nums[n-2]*nums[n-3], nums[0]*nums[1]*nums[n-1]);
}
}
求数组中三个数的乘积,要求输出最大的乘积
于 2023-08-18 21:56:13 首次发布