最大乘积(牛客/拼多多)
[编程题] 最大乘积
时间限制:1秒
空间限制:32768K
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
无序整数数组A[n]
输出描述:
满足条件的最大乘积
输入例子1:
3 4 1 2
输出例子1:
24
代码
while(line=readline()){
var lines = line.split(' ');
var result2=0;
var result1=0;
if(lines.length>3){
lines.sort(function(a,b){
return a-b;
});
result1=lines[0]*lines[1]*lines[lines.length-1];
result2=lines[lines.length-1]*lines[lines.length-2]*lines[lines.length-3];
print(Math.max(result1,result2));
}
else if(lines.length == 3){
result=lines[0]*lines[1]*lines[2];
print(result);
}
}
思路
首先将传进来的值按照从小到大的顺序排列,这里用sort函数进行的排序,然后这里有两种情况:
第一种 输入的只都是正的,直接取排序后的后三位相乘;
第二种 输入的有正有负 , 排序后的前两位都是负的并且和最大的数相乘的结果大于排序后后三位的结果;
因此我们需要判断两种情况。这里我直接将两种情况的得数进行比较取最大采用Math.max方法