寻找 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 个数的最大乘积的主要内容,如果未能解决你的问题,请参考以下文章