题目描述:
代码如下:
class Solution {
public int maximumProduct(int[] nums) {
//线性扫描
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;
//三数之和的最大乘积有几种情况
//1.三个最大的正数相乘
//2.两个最小的负数(绝对值最大)乘上一个最大的正数
//所以我们只需要找出这五个数,然后取其中三个数乘积的最大值即可
//这里用 线性搜索法 来找出这五个数(两个最小的数,三个最大的数)
for(int x:nums){
if(x<min1){
min2=min1;
min1=x;
}else if(x<min2){
min2=x;
}
if(x>max1){
max3=max2;
max2=max1;
max1=x;
}else if(x>max2){
max3=max2;
max2=x;
}else if(x>max3){
max3=x;
}
}
return Math.max(min1*min2*max1,max1*max2*max3);
}
}