题解 | #排序/一次遍历#

三个数的最大乘积

http://www.nowcoder.com/practice/8ae05c2913fe438b8b14f3968f64fc0b

排序

class Solution {
public:
    /**
     * 最大乘积
     * @param A int整型一维数组 
     * @param ALen int A数组长度
     * @return long长整型
     */
    long long solve(int* A, int n) {
        // write code here
        sort(A, A + n);
        return max((long long) A[0] * A[1] * A[n - 1], (long long)A[n - 3] * A[n - 2] * A[n - 1]);
    }
};

一次遍历

class Solution {
public:
    /**
     * 最大乘积
     * @param A int整型一维数组 
     * @param ALen int A数组长度
     * @return long长整型
     */
    long long solve(int* A, int n) {
        // write code here
        long long min1 = INT_MAX, min2 = INT_MAX;
        long long max1 = INT_MIN, max2 = INT_MIN, max3 = INT_MIN;
        for(int i = 0; i < n; i ++){
            int x = A[i];
            if(x < min1){
                min2 = min1;
                min1 = x;
            }else if(x < min2){
                min2 = x;
            }

            if(x > max1){
                max3 = max2;
                max2 = max1;
                max1 = x;
            }else if(x > max2){
                max3 = max2;
                max2 = x;
            }else if(x > max3){
                max3 = x;
            }
        }
        return max(min1 * min2 * max1, max1 * max2 * max3);
    }
};
全部评论

相关推荐

认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
简历当中有水分算不算造假...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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