要求时间复杂度: ,空间复杂度: 。
数据范围:
//先对其数组进行冒泡排序(升序排列)。 int temp=0; for (int i=0;i<in.length-1;i++) { for (int j=0;j<in.length-1-i;j++) { if (in[j] > in[j+1]) { // 相邻元素两两对比 temp = in[j+1]; in[j+1] = in[j]; // 元素交换 in[j] = temp; } } }long negative=Math.abs(in[0])*Math.abs(in[1]); //对最小的两个负数进行乘积 long positiveNumber=in[in.length-2]*in[in.length-3]; //对倒数第二、第三的两个正数进行乘积 if(negative>positiveNumber) { return negative*in[in.length-1]; //最后乘以数组最后一个元素(最大的数) } else { return positiveNumber*in[in.length-1]; }
long long solve(int* A, int ALen) { // write code here int min1 = INT_MAX, min2 = INT_MAX; // 最大的、第二大的和第三大的 int max1 = INT_MIN, max2 = INT_MIN, max3 = INT_MIN; for (int i=0;i<ALen;i++) { if (A[i] < min1) { min2 = min1; min1 = A[i]; } else if (A[i] < min2) { min2 = A[i]; } if (A[i] > max1) { max3 = max2; max2 = max1; max1 = A[i]; } else if (A[i] > max2) { max3 = max2; max2 = A[i]; } else if (A[i] > max3) { max3 = A[i]; } } return max((long long)min1 * min2 * max1,(long long) max1 * max2 * max3); }
import java.util.*; public class Solution { /** * 最大乘积 * @param A int整型一维数组 * @return long长整型 */ public long solve (int[] A) { // write code here int max1=Integer.MIN_VALUE,max2=Integer.MIN_VALUE,max3=Integer.MIN_VALUE; int min1=Integer.MAX_VALUE,min2=Integer.MAX_VALUE; for(int num:A){ if(num>max1){ max3=max2; max2=max1; max1=num; } else if(num>max2){ max3=max2; max2=num; } else if(num>max3) max3=num; if(num<min1){ min2=min1; min1=num; } else if(num<min2) min2=num; } return Math.max((long)max1*max2*max3,(long)max1*min1*min2); } }
import java.math.BigInteger; import java.util.Arrays; import java.util.Scanner; public class T_57 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a[] = {3472,7789,7955,-7098,-9281,6101,5051,7778,3090,7423,-7151,5652,1595,-8094,677,-8324,8347,-2482,9313,-9338,-3157,8559,6945,3618,3087,121,-8468,3225,1356,6939,2799,-7231,-6309,-5453,633,-8689,-4776,2714,-2743,-1409,5918,-3333,1803,8330,-2206,-6117,-4486,-7903,-4375,-3739,2897,8056,-5864,-522,7451,-4541,-2813,5790,-532,-6517,925}; System.out.println(solve(a)); } public static BigInteger solve (int[] A) { int n = A.length; if(n<3) return new BigInteger("0"); Arrays.sort(A); // 比较这两个位置的大小即可 BigInteger a = new BigInteger(A[n-1]+""); BigInteger b = new BigInteger(A[n-2]+""); BigInteger c = new BigInteger(A[n-3]+""); BigInteger d = new BigInteger(A[0]+""); BigInteger e = new BigInteger(A[1]+""); BigInteger r1 = a.multiply(b).multiply(c); BigInteger r2 = d.multiply(e).multiply(a); if(r1.compareTo(r2)>=0) // 转成long类型 return r1.longValueExact(); else return r2.longValueExact(); } }
public long solve(int[] A) { // 初始化所需的最大和最小值 int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE; int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE; // 遍历数组,找出前三个最大值和前两个最小值 for (int num : A) { // 更新最大值 if (num > max1) { max3 = max2; max2 = max1; max1 = num; } else if (num > max2) { max3 = max2; max2 = num; } else if (num > max3) { max3 = num; } // 更新最小值 if (num < min1) { min2 = min1; min1 = num; } else if (num < min2) { min2 = num; } } // 计算两种可能的最大乘积,并返回其中的较大值 return Math.max((long) max1 * max2 * max3, (long) min1 * min2 * max1); }
public long solve(int[] A) { // write code here Arrays.sort(A); return Math.max( ((long) A[A.length - 1] * A[A.length - 2] * A[A.length - 3]),(long) A[0] * A[1] * A[A.length - 1]); }
import java.util.*; public class Solution { /** * 最大乘积 * @param A int整型一维数组 * @return long长整型 */ public long solve (int[] A) { // write code here Arrays.sort(A);//排序,排序后取最小两个数和最大数的乘积与三个最大数相比取大者返回 long a=A[A.length-1]; long b=A[A.length-2]; long c=A[A.length-3]; long d=A[0]; long e=A[1]; if(a*b*c>a*d*e) return a*b*c; else return a*d*e; } }
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最大乘积 * @param A int整型一维数组 * @return long长整型 */ function solve(A) { //三个数的最大乘积有两种可能 //1.三个最大的数相乘 //2.两个最小的数(负数)和一个最大的正数相乘 if (A.length < 3) return 0; // 初始化最大和最小值 let max1 = -Infinity, max2 = -Infinity, max3 = -Infinity; // 三个最大的数 let min1 = Infinity, min2 = Infinity; // 两个最小的数 for (let num of A) { // 更新最大值 if (num > max1) { max3 = max2; max2 = max1; max1 = num; } else if (num > max2) { max3 = max2; max2 = num; } else if (num > max3) { max3 = num; } // 更新最小值 if (num < min1) { min2 = min1; min1 = num; } else if (num < min2) { min2 = num; } } // 计算两种可能的最大乘积 const res1 = max1 * max2 * max3; // 三个最大值的乘积 const res2 = min1 * min2 * max1; // 两个最小值和一个最大值的乘积 // 返回较大的乘积 return Math.max(res1, res2); } module.exports = { solve: solve, };
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最大乘积 * @param A int整型一维数组 * @return long长整型 */ public long solve (int[] A) { // write code here Arrays.sort(A); return Math.max((long)A[0] * (long)A[1] * (long)A[A.length - 1], (long)A[A.length - 3] * (long)A[A.length - 2] * (long)A[A.length - 1]); } }
public long solve (int[] A) { // write code here int len=A.length; Arrays.sort(A); return Math.max((long)A[len-1]*A[len-2]*A[len-3] ,(long)A[len-1]*A[0]*A[1]); }
public long solve (int[] A) { // write code here //全正:最后三个相乘 //全负:最后三个相乘 //有正有负:要么是最后三个相乘,要么是第1个元素*第二个元素*最后一个元素 Arrays.sort(A); int num = A.length; long end1 = (long)A[num - 1] * A[num - 2] * A[num - 3]; long end2 = (long)A[0]*A[1]*A[num-1]; long max = Math.max(end1,end2); return max; }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最大乘积 * @param A int整型一维数组 * @return long长整型 */ public long solve (int[] A) { // write code here // 两种情况:2 负 + 1 正 -> 最小的两个数 + 最大数 // 3 正 最大的三个数 Arrays.sort(A); long max = Long.MIN_VALUE; if(A[1] < 0) { max = Math.max((long)A[1] * (long)A[0] * (long)A[A.length - 1], max); } max = Math.max((long)A[A.length - 1] * (long)A[A.length - 2] * (long)A[A.length - 3], max); return max; } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最大乘积 * @param A int整型一维数组 * @return long长整型 */ public long solve (int[] A) { Arrays.sort(A); long min1=A[0],min2=A[1]; int length=A.length; long max1=A[length-1],max2=A[length-2],max3=A[length-3]; return min1*min2*max1 > max1*max2*max3 ? min1*min2*max1 : max1*max2*max3; } }