当前位置 : 主页 > 编程语言 > java >

#yyds干货盘点# 解决名企真题:最大乘积

来源:互联网 收集:自由互联 发布时间:2022-07-07
1.简述: 描述 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 输入共2行,第一行包括一个整

1.简述:

描述

给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

输入描述:

输入共2行,第一行包括一个整数n,表示数组长度 第二行为n个以空格隔开的整数,分别为A1,A2, … ,An

输出描述:

满足条件的最大乘积

示例1

输入:

4
3 4 1 2

输出:

24

2.代码实现:

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);

}
}

网友评论