1.简述: 描述 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 输入共2行,第一行包括一个整
1.简述:
描述
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
输入共2行,第一行包括一个整数n,表示数组长度 第二行为n个以空格隔开的整数,分别为A1,A2, … ,An
输出描述:
满足条件的最大乘积
示例1
输入:
43 4 1 2
输出:
242.代码实现:
import java.util.*;public class Main{
Scanner scan=new Scanner(System.in);
public static void main(String[] args) {
Main maxProduct=new Main();
maxProduct.max_product();
}
static Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer e1, Integer e2) {
return e2 - e1;
}
};
private void max_product(){
int n=scan.nextInt();
int [] arr=new int[n];
PriorityQueue<Integer> Descending=new PriorityQueue<>(cmp);//降序
PriorityQueue<Integer> Ascending=new PriorityQueue<>();
for(int i=0;i<n;i++){
int temp=scan.nextInt();
Ascending.add(temp);
Descending.add(temp);
}
long max1=Descending.poll();
long max2=Descending.poll();
long max3=Descending.poll();
long min1=Ascending.poll();
long min2=Ascending.poll();
long res=Math.max(max1*max2*max3,max1*(min1*min2));
System.out.println(res);
}
}