数组3个数乘积的最大值

来源:互联网 发布:网络黑白 百度文学 编辑:程序博客网 时间:2024/06/01 07:24
/*    题目:给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大。    要求时间复杂度:O(n),空间复杂度:O(1) */function maxProd(arr) {    var len=arr.length;    if(len<3){return;}    var prod=arr[0]*arr[1]*arr[2];    if(len===3){return prod;}    var max1=Number.MIN_VALUE,         max2=Number.MIN_VALUE,        max3=Number.MIN_VALUE;    var min1=Number.MAX_VALUE,        min2=Number.MAX_VALUE;    for(var i=0;i<len;i++){        if(arr[i]>max1){            max3=max2;            max2=max1;            max1=arr[i];        }else if(arr[i]>max2){            max3=max2;            max2=arr[i];        }else if(arr[i]>max3){            max3=arr[i];        }else{}        if(arr[i]<min1){            min2=min1;            min1=arr[i];        }else if(arr[i]<min2){            min2=arr[i];        }else{}    }    // 当数组的最大值<=0或者是数组的最小值>=0时,乘积最大就是数组中最大值的乘积    if(max1<=0||min1>=0){        return max1*max2*max3;    }    // 否则,最大乘积在(2小+1大)或(3大)中取得    var prod1=max1*max2*max3,        prod2=min1*min2*max1;    return prod1>prod2?prod1:prod2;}var arr=[3,-4,2,1];console.log(maxProd(arr)); // 6

阅读全文
0 0