目标
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 1:
输入:nums = [1,2,3]
输出:6
示例 2:
输入:nums = [1,2,3,4]
输出:24
示例 3:
输入:nums = [-1,-2,-3]
输出:-6
说明:
- 3 <= nums.length <= 10^4
- -1000 <= nums[i] <= 1000
思路
从数组中取三个不同的下标,返回其乘积的最大值。
由于存在负数,分情况讨论,定义 max1、max2、max3 分别为前三大元素,min1、min2 分别是前二小元素:
- 如果
max1 < 0, 乘积只能为负,要使乘积最大,那么其绝对值应该最小,因此取max1 * max2 * max3 - 如果
max2 < 0, 最大乘积可以为正,取最小的两个负数相乘,乘积最大,取max1 * min1 * min2 - 如果
max3 < 0,乘积可能为正也可能为负(只有三个元素),不论那种情况,都可取max1 * min1 * min2 - 如果
max3 > 0, 最大值可能是max1 * max2 * max3或者max1 * min1 * min2
代码
/**
* @date 2026-07-27 16:37
*/
public class MaximumProduct628 {
public int maximumProduct_v1(int[] nums) {
int max1 = -1001, max2 = -1001, max3 = -1001;
int min1 = 1001, min2 = 1001;
for (int num : nums) {
if (num > max1) {
max3 = max2;
max2 = max1;
max1 = num;
} else if (num > max2) {
max3 = max2;
max2 = num;
} else if (num > max3) {
max3 = num;
}
if (num < min1) {
min2 = min1;
min1 = num;
} else if (num < min2) {
min2 = num;
}
}
return Math.max(max1 * max2 * max3, max1 * min1 * min2);
}
}
性能
