牛客网-最大乘积

题目描述

给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)

输入描述:

无序整数数组A[n]

输出描述:

满足条件的最大乘积
示例1

输入

复制
3 4 1 2

输出

复制
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;
}

 

posted @ 2019-02-24 21:45  峰寒  阅读(311)  评论(0编辑  收藏  举报