给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
注意:
- 给定的整型数组长度范围是[3,10 000],数组中所有的元素范围是[-1000, 1000]。
- 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
思路:
求三个数乘积的最大值,有两种可能
- 两个最小的负数相乘同时乘以最大正数
- 三个最大的正数相乘
取这两种情况的最大值即可
所以我们需要找到这5个值
通过遍历数组,通过逻辑条件得到相应的值
class Solution {
public int maximumProduct(int[] nums) {
//只需求负数的两个最小值 以及正数的3个最大值
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 i : nums){
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(min1*min2*max1,max3*max2*max1);
}
}