要求时间复杂度:
,空间复杂度:
。
数据范围:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 最大乘积
* @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,
};
/**
* 最大乘积
* @param A int整型一维数组
* @return long长整型
*/
function solve( A ) {
// write code here
A.sort((a,b)=>a-b);
console.log(A);
let len = A.length;
//前两个+最后一个
let n = A[0]*A[1]*A[len-1];
//最后三个
let m=A[len-3]*A[len-2]*A[len-1];
return Math.max(n,m);
}
module.exports = {
solve : solve
};