题解 | #排序/一次遍历#
三个数的最大乘积
http://www.nowcoder.com/practice/8ae05c2913fe438b8b14f3968f64fc0b
排序
class Solution { public: /** * 最大乘积 * @param A int整型一维数组 * @param ALen int A数组长度 * @return long长整型 */ long long solve(int* A, int n) { // write code here sort(A, A + n); return max((long long) A[0] * A[1] * A[n - 1], (long long)A[n - 3] * A[n - 2] * A[n - 1]); } };
一次遍历
class Solution { public: /** * 最大乘积 * @param A int整型一维数组 * @param ALen int A数组长度 * @return long长整型 */ long long solve(int* A, int n) { // write code here long long min1 = INT_MAX, min2 = INT_MAX; long long max1 = INT_MIN, max2 = INT_MIN, max3 = INT_MIN; for(int i = 0; i < n; i ++){ int x = A[i]; if(x < min1){ min2 = min1; min1 = x; }else if(x < min2){ min2 = x; } if(x > max1){ max3 = max2; max2 = max1; max1 = x; }else if(x > max2){ max3 = max2; max2 = x; }else if(x > max3){ max3 = x; } } return max(min1 * min2 * max1, max1 * max2 * max3); } };