解法:寻找前三大和最小的两个数,最后返回 前三大的乘积 和 最大值*最小的两个数 中的较大值

class Solution {
public:
    /**
     * 最大乘积
     * @param A int整型一维数组 
     * @param ALen int A数组长度
     * @return long长整型
     */
    long long solve(int* A, int ALen) {
        // write code here
        int first = A[0];
        int second = A[1];
        int third = A[2];
        int minFirst, minSecond;
        if (A[0] > A[1] && A[0] > A[2])
        {
            first = A[0];
            if(A[1] > A[2])
            {
                second = A[1];
                minFirst = A[2];
                minSecond = A[1];
            }
            else
            {
                third = A[2];
                minFirst = A[1];
                minSecond = A[2];
            }
        }
        else if (A[1] > A[0] && A[1] > A[2])
        {
            first = A[1];
            if(A[0] > A[2])
            {
                second = A[0];
                minFirst = A[2];
                minSecond = A[0];
            }
            else
            {
                third = A[2];
                minFirst = A[0];
                minSecond = A[2];
            }
        }
        else if (A[2] > A[1] && A[2] > A[0])
        {
            first = A[2];
            if(A[1] > A[0])
            {
                second = A[1];
                minFirst = A[0];
                minSecond = A[1];
            }
            else
            {
                third = A[0];
                minFirst = A[0];
                minSecond = A[1];
            }
        }

        for(int i = 3; i < ALen; i++)
        {
            if (A[i] > first)
            {
                third = second;
                second = first;
                first = A[i];
            }
            else if (A[i] > second)
            {
                third = second;
                second = A[i];
            }
            else if (A[i] > third)
            {
                third = A[i];
            }

            if(A[i] < minFirst)
            {
                minSecond = minFirst;
                minFirst = A[i];
            }
            else if(A[i] < minSecond)
            {
                minSecond = A[i];
            }
        }
        if (((long long)first * second * third) > ((long long)first * minFirst * minSecond))
            return (long long)first * second * third;
        else
            return (long long)first * minFirst * minSecond;
    }
};