题解 | #三个数的最大乘积#

三个数的最大乘积

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;
        }
        
    }
}


全部评论

相关推荐

09-06 10:38
井冈山大学 Java
offer哪里跑__:第一眼,有点面生 第二眼,原来是我的余生 哥不白看,哥把这个月实习工资都给你,这是哥实习一天一天辛苦攒的,虽然少,但不真
正在实习的你,几点下班
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务