寻找 3 个数的最大乘积

Posted 猪八戒1.0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寻找 3 个数的最大乘积相关的知识,希望对你有一定的参考价值。

https://www.lanqiao.cn/problems/315/learning/

题目描述
实现一个算法在数组中找到 3 个数字的最大乘积。介绍如下:

例如数组 [5, -2, 3, 1, -1, 4] 中 3 个数字的最大乘积为 60。
输入描述
第一行为数字 N((3≤N≤1000),表示数组元素的个数。

第二行为数组元素 Ai   −1000≤Ai ≤1000

输出描述
输出一行,为 3 个数字的最大乘积。

输入输出样例
示例
输入

6
5 -2 3 1 -1 4

输出

60

如果用暴力3重循环会超时1000*1000*1000=10的9次方,而一般10的8次方:


import java.util.Scanner;

public class Main 
	static int a[]=new int[1010];
	public static void main(String[] args) 
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		for(int i=0;i<n;i++) 
			a[i]=sc.nextInt();
		
    //有负数不要初始给0
		int ans=(int)-1e9;
		for(int i=0;i<n;i++) 
			for(int j=i+1;j<n;j++) 
				for(int k=j+1;k<n;k++) 
					ans=Math.max(ans, a[i]*a[j]*a[k]);
				
			
		
		System.out.println(ans);
	
	

使用排序,如果都是正数排序后取最后三个即可,如果有负数可能取开始两个负数和最后一个数


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main 
	public static void main(String[] args) 
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		ArrayList<Integer> list = new ArrayList<>();
		for(int i=0;i<n;i++) 
			list.add(sc.nextInt());
		
		//排序一般内部快排nlogn 最多1e5 而现在最多1000个数 不超时
		Collections.sort(list);
		
		int ans=list.get(n-1)*list.get(n-2)*list.get(n-3);
		ans=Math.max(ans, list.get(0)*list.get(1)*list.get(n-1));
		System.out.println(ans);
	

以上是关于寻找 3 个数的最大乘积的主要内容,如果未能解决你的问题,请参考以下文章

几个数字求乘积最大或者最小,思路是啥

LeetCode:三个数的最大乘积628

[LeetCode] 628. 三个数的最大乘积 ☆

[Nowcoder] 最大乘积(拼多多笔试题)

最大乘积(大佬的代码)

628. 三个数的最大乘积『简单』