【题目】
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述: 无序整数数组A[n]
输出描述: 满足条件的最大乘积
示例1
输入 3 4 1 2
输出 24
【思路】
三个数的最大乘积为:
1.正数中的最大的三个数
2.正数中最大的一个数 和 负数最小的两个数(负负得正)
package nian2018;
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long[] array = new long[n];
for(int i = 0;i<n;i++){
array[i] = sc.nextLong();
}
getMaxMulti(array,n);
}
public static void getMaxMulti(long[] array,int num){
long max1 = 0,max2 = 0,max3 = 0,min1 = 0,min2 = 0;
for(int i = 0;i<num;i++){
if(array[i]!= 0){
if(array[i]>max1){
max3 = max2;
max2 = max1;
max1 = array[i];
}else if(array[i]>max2){
max3 = max2;
max2 = array[i];
}else if(array[i]>max3){
max3 = array[i];
}else if(array[i]<min1){
min2 = min1;
min1 = array[i];
}else if(array[i]<min2 && array[i]>min1){
min2 = array[i];
}
}else continue;
}
long max = Math.max(max1*max2*max3, max1*min1*min2);
System.out.println(max);
}
}