JAVA 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
程序员文章站
2024-03-15 22:34:18
...
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int sum = in.nextInt();
List<Integer> set = new ArrayList<>();
for(int i=0;i<sum;i++) {
set.add(in.nextInt()); //输入数据到集合
}
//-------------------按大小给其集合排序
set.sort((a,b)->{
return a>b?1:-1;
});
//--------------------计算3个最大正数----------2个最小负数与一个最大正数的乘积
//--------------------因为数据太大会溢出所以使用BigDecimal
BigDecimal b1=new BigDecimal(set.get(0));
BigDecimal b2=new BigDecimal(set.get(1));
BigDecimal b3=new BigDecimal(set.get(set.size()-1));
BigDecimal b4=new BigDecimal(set.get(set.size()-2));
BigDecimal b5=new BigDecimal(set.get(set.size()-3));
BigDecimal m1=b1.multiply(b2).multiply(b3);
BigDecimal m2=b3.multiply(b4).multiply(b5);
//------------比较最大值输出
if(m1.compareTo(m2)>0) {
System.out.println(m1);
}else {
System.out.println(m2);
}
}
}
下一篇: 牛客网刷题java之在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
推荐阅读
-
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
-
JAVA 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
-
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
-
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
-
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
-
基础算法:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)