题目描述
实现一个算法在数组中找到3个数字的最大乘积。介绍如下:·例如数组[5,-2,3,1,-1,4]中3个数字的最大乘积为60。
输入描述
第一行为数字N(3≤N≤ 1000),表示数组元素的个数。第二行为数组元素A,-1000≤ A ≤1000,
输出描述
输出一行,为3个数字的最大乘积。输入输出样例
示例
输入
6
5 -2 3 1 -1 4
输出
60
暴力解法:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] arr=new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i]=sc.nextInt();
}
int max= (int) -1e9;
for (int i = 0; i < arr.length; i++) {
for (int j = i+1; j < arr.length; j++) {
for (int k = j+1; k < arr.length; k++) {
max=Math.max(max,arr[i]*arr[j]*arr[k]);
}
}
}
System.out.println(max);
}
}
优化版:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] arr=new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i]=sc.nextInt();
}
//如果数组都是正数,那我们贪心 选出最大三个
Arrays.sort(arr);
//乘积最大 那我就选最大的三个
//-1000 -1000 1 2 3 选两个负数+1个正数
int ans=arr[n-1]*arr[n-2]*arr[n-3];
ans=Math.max(ans,arr[0]*arr[1]*arr[n-1]);
System.out.println(ans);
}
}