牛客网-最大乘积
题目描述
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述:
无序整数数组A[n]
输出描述:
满足条件的最大乘积
示例1
输出
复制24
#include <cstdio> #include <iostream> #define inf 999999999 using namespace std; int main() { int n; int count = 0; long long ans = 0; int flag0 = 0; long long ma1,ma2,ma3,mi1,mi2; ma1 = ma2 = ma3 = -inf; mi1 = mi2 = inf; int t; cin>>t; while( t-- ) { cin>>n; if( n == 0 ) flag0 = 1; count++; if( n > ma1 ) { ma3 = ma2; ma2 = ma1; ma1 = n; }else if( n > ma2 ) { ma3 = ma2; ma2 = n; }else if( n > ma3 ) { ma3 = n; } if( n < mi1 ) { mi2 = mi1; mi1 = n; }else if( n < mi2 ) { mi2 = n; } } long long a = ma1 * ma2 * ma3; long long b = ma1 * mi1 * mi2; if(a>b) ans = a; else ans = b; if(count ==3) ans = ma1* ma2 * ma3; printf("%lld\n",ans); return 0; }