开始答题前先捋清楚数学逻辑:

出现最大乘积,只有两种可能

  1. 数组都是正数或都是负数,那最大的数就是三个最大的数相乘
  2. 数组有正有负,最大的数可能是两个最小的负数和最大的正数相乘

python实现

class Solution:
    def solve(self , A: List[int]) -> int:
        A.sort()
        return max(A[0]*A[1]*A[-1], A[-1]*A[-2]*A[-3])

c++实现

class Solution {
public:
    long long solve(int* A, int ALen) {
        // write code here
        vector<int> nums;
        int *p;
        for(p=A; p<(A+ALen); p++){    //循环数组,放到nums中
            long long temp = *p;
            nums.emplace_back(temp);
        }
        sort(nums.begin(), nums.end());  //排序
        int len = nums.size();
        long long max1 = nums[0]*nums[1]*nums[len-1];         //两个最小的数和一个最大的数
        long long max2 = nums[len-1]*nums[len-2]*nums[len-3];  //三个最大的数
        return max(max1, max2); //比较两种可能性,返回大的
    }
};