- 1、题目描述:
图片说明

- 2、题目链接:

https://www.nowcoder.com/practice/8ae05c2913fe438b8b14f3968f64fc0b?tpId=117&tqId=37830&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high%2Fquestion-ranking&tab=answerKey
-3、 设计思想:

-4、视频讲解链接B站视频讲解

-5、代码:
c++版本:

class Solution {
public:
    /**
     * 最大乘积
     * @param A int整型一维数组 
     * @param ALen int A数组长度
     * @return long长整型
     */
    long long solve(int* A, int ALen) {
        // write code here
        // 最大的、第二大的和第三大的
        int max1 = INT_MIN, max2 = INT_MIN, max3 = INT_MIN;
        //最小的和第二小的(负数的时候要用)
        int min1 = INT_MAX, min2 = INT_MAX;
        for(int i = 0;i < ALen;i ++){
            if(A[i] < min1){//更新最小值
                min2 = min1;
                min1 = A[i];
            }else if(A[i] < min2){//更新第二小
                min2 = A[i];
            }
            if (A[i] > max1){//更新最大值
                max3 = max2;
                max2 = max1;
                max1 = A[i];
            }else if(A[i] > max2){//更新第二大
                max3 = max2;
                max2 = A[i];
            }else if(A[i] > max3){//更新第三大
                max3 = A[i];
            }
        }
        return max((long long)min1 * min2 * max1,(long long) max1 * max2 * max3);
    }
};

Java版本:

import java.util.*;


public class Solution {
    /**
     * 最大乘积
     * @param A int整型一维数组 
     * @return long长整型
     */
    public long solve (int[] A) {
        // write code here
        // 最大的第二大的和第三大的
        int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;
        //最小的和第二小的(负数的时候要用)
        int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
        for(int i = 0;i < A.length;i ++){
            if(A[i] < min1){//更新最小值
                min2 = min1;
                min1 = A[i];
            }else if(A[i] < min2){//更新第二小
                min2 = A[i];
            }
            if (A[i] > max1){//更新最大值
                max3 = max2;
                max2 = max1;
                max1 = A[i];
            }else if(A[i] > max2){//更新第二大
                max3 = max2;
                max2 = A[i];
            }else if(A[i] > max3){//更新第三大
                max3 = A[i];
            }
        }
        return Math.max((long)min1 * min2 * max1,(long) max1 * max2 * max3);
    }
}

Python版本:

#
# 最大乘积
# @param A int整型一维数组 
# @return long长整型
#
class Solution:
    def solve(self , A ):
        # write code here
        #最大的第二大的和第三大的
        max1 = max2 = max3 = float('-inf')
        #最小的和第二小的(负数的时候要用)
        min1 = min2 = float('inf')
        for i in A:
            if i < min1: #更新最小值
                min2 = min1
                min1 = i
            elif i < min2:#更新第二小
                min2 = i
            if i > max1:#更新最大值
                max3 = max2
                max2 = max1
                max1 = i
            elif i > max2:#更新第二大
                max3 = max2
                max2 = i
            elif i > max3:#更新第三大
                max3 = i;
        return max(min1 * min2 * max1,max1 * max2 * max3)

JavaScript版本:

//后台数据过大js没办法通过
/**
 * 最大乘积
 * @param A int整型一维数组 
 * @return long长整型
 */
function solve( A ) {
    // write code here
      // 最大的、第二大的和第三大的

    let max1 = -2147483648, max2 = -2147483648, max3 = -2147483648;
    //最小的和第二小的(负数的时候要用)
    let min1 = 2147483647, min2 = 2147483647;
    for(let i = 0;i < A.length;i ++){
        if(A[i] < min1){//更新最小值
            min2 = min1;
            min1 = A[i];
        }else if(A[i] < min2){//更新第二小
            min2 = A[i];
        }
        if (A[i] > max1){//更新最大值
            max3 = max2;
            max2 = max1;
            max1 = A[i];
        }else if(A[i] > max2){//更新第二大
            max3 = max2;
            max2 = A[i];
        }else if(A[i] > max3){//更新第三大
            max3 = A[i];
        }
    }
    return Math.max(min1 * min2 * max1,max1 * max2 * max3);
}
module.exports = {
    solve : solve
};