欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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