解法:寻找前三大和最小的两个数,最后返回 前三大的乘积 和 最大值*最小的两个数 中的较大值
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; } };