//题目说了数组含有正数负数和0,那么最小的那个数必定是负数,最大的那个数必定是正数
//要想三个数的乘积最大,那么要么取三个最大的正数相乘,要么取两个最小的负数和最大的正数相乘
//第一步:通过一趟遍历,将找到第一大第二大第三大的三个数和第一小第二小的两个数
//第二步:比较两种情况下三个数的乘积,看哪个更大就返回哪个
long long solve(int* A, int ALen ) {
    int minmin= 10001, maxmax = -10001;   //就是走过场,设最小其实最大,设最大其实最小,就是给机会让你更新
      //因为题目给了数据的范围,为了方便就假设最值刚好超过边界,而不是设整型的最值边界
    int max1 = maxmax, max2 = maxmax, max3 = maxmax;
    int min1 = minmin, min2 = minmin;
     // min1 < min2 <…… < max1 < max2 < max3
    for(int i = 0;i < ALen;i ++){    //只有当A[i]出现在两种位置时才会更新min
            if(A[i] < min1){//更新最小值
                min2 = min1;
                min1 = A[i];
            }
            else if(A[i] < min2){//更新第二小
                min2 = A[i];
            }
           if (A[i] > max1){//当A[I]出现在三种地方时需要更新max
                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];
            }
    }
    if((long long)min1 * min2 * max1 > (long long) max1 * max2 * max3)
        return (long long)min1 * min2 * max1;
    else
        return (long long) max1 * max2 * max3;
}