function computeProduct(arr) {
let max = 0
let zarr = [],farr = []
if(arr.length === 3){
max = arr[0]*arr[1]*arr[2]
return max
}
for(let i=0;i<arr.length;i++){
if(arr[i]>0){
zarr.push(arr[i])
}else{
farr.push(arr[i])
}
}
zarr.sort((a,b)=>b-a)
farr.sort((a,b)=>a-b)
if(farr.length === 1){
max = zarr[0]*zarr[1]*zarr[2]
}else{
let num1 = zarr[0]*zarr[1]*zarr[2]
let num2 = zarr[0]*farr[0]*farr[1]
if(num1>num2){
max = num1
}else{
max = num2
}
}
return max
}
console.log(computeProduct([-10, 7, -200, 3, 5, -1, -7]))
思路:
1.如果数组就三个数,那无可厚非,就是三个数的乘积
2.将数组分为正数数组和负数数组,两类
3.比较正数数组排序之后,前三个数的乘积 和 一个正数和负数数组最小的两个数。不过有个前提,如果负数数组只有一个,那么不用比较了,最大的乘积就是正数数组的前三个。
4.讲到这其实可以去看看最小的乘积了,利用这个思路,vscode上面的解法太多,大多数考虑不周到,所以还是要多思考。