题解 | #三个数的最大乘积#
三个数的最大乘积
http://www.nowcoder.com/practice/8ae05c2913fe438b8b14f3968f64fc0b
import java.util.*;
//枚举,分三种情况:
//1,全是正数
//2,全是负数
//3,有正数和负数,0
public class Solution {
/**
* 最大乘积
* @param A int整型一维数组
* @return long长整型
*/
public long solve (int[] A) {
// write code here
int length = A.length;
if(length == 3){
long x = A[0]*A[1]*A[2];
return x;
}
Arrays.sort(A);
//全是正数或者全是负数
if(A[0]>0 || A[length-1]<0){
// long x = A[length-1]*A[length-2]*A[length-3];
//注意上面的写法,A[length-1]*A[length-2]*A[length-3],有时候会超出整形数范围int[-2147483648,2147483647];
//下面的写法,是将整形转化为long,再做运算
long x = A[length-1];
x = x*A[length-2];
x = x*A[length-3];
return x;
}
//有正有负,0,其中又分两种情况,一是第二小的值小于0,即有至少2个负数;二是第二小的值大于或等于0,即只有1个负数
if(A[1]<0){//一是第二小的值小于0,即有至少2个负数
//二负一正
long x = A[0];
x = x*A[1];
x =x*A[length-1];
//三个正数
long y = A[length-1];
y = y*A[length-2];
y = y*A[length-3];
return Math.max(x,y);
}else{//二是第二小的值大于或等于0,即只有1个负数
//三个正数或者两个正数和0
long y = A[length-1];
y = y*A[length-2];
y = y*A[length-3];
return y;
}
}
}
腾讯公司福利 1145人发布