1.排序
思路:
1.三个数都是整数或者都是负数:那么就排序,取大的前三个
2.两负一正:取排序后倒数两个负数,和取排序最大那个数相乘
3.两正一负:直接像第一种那样取前三大
public static int sortMethod(int[] array){
Arrays.sort(array);
int n = array.length;
//就是两种情况而已
return Math.max(array[0]*array[1]*array[n-1],array[n-1]*array[n-2]*array[n-3]);
}
2. 线性扫描(重点)
(还不太懂2021/8/19)
由于排序的时间复杂度一般都是N*logn,比较高,所以我们就不用排序,而是分析上面的,发现我们只需要用到上面的5个数就行:array[0]*array[1]*array[n-1],array[n-1]*array[n-2]*array[n-3],那我们就从这5个数下手:
public static int getMaxMin(int[] array){
//这里因为我们要判断每个数是否>或小,所以min1=Integer.MAX_VALUE就反过来,不是字面意思
//min1是最小,min2是倒数第二小
//max1是最大,max2是第二大
int min1=Integer.MAX_VALUE,min2=Integer.MAX_VALUE;
int max1=Integer.MIN_VALUE,max2=Integer.MIN_VALUE,max3=Integer.MIN_VALUE;
for (int x : array) {
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);
}