【算法题】最大乘积

来源:互联网 发布:知豆新能源图片 编辑:程序博客网 时间:2024/06/08 12:22

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

输入描述:
无序整数数组A[n]

输出描述:
满足条件的最大乘积

输入例子1:
4
3 4 1 2

输出例子1:
24


#include <iostream>#include <string>#include <cstring>#include <vector>#include <numeric>#include <algorithm>using namespace std;//#define debug_vector<long long> A;long long func(){    vector<long long > Positive(3,0);    vector<long long> Negative(3,0);    for (auto i = 0; i < A.size();++i)    {        if (A[i] > 0)        {            Positive[2] = max(Positive[1] * A[i], Positive[2]);            Negative[2] = min(Negative[1] * A[i], Negative[2]);        }        else        {            Positive[2] = max(Negative[1] * A[i], Positive[2]);            Negative[2] = min(Positive[1] * A[i], Negative[2]);        }        if (A[i] > 0)        {            Positive[1] = max(Positive[0] * A[i], Positive[1]);            Negative[1] = min(Negative[0] * A[i], Negative[1]);        }        else        {            Positive[1] = max(Negative[0] * A[i], Positive[1]);            Negative[1] = min(Positive[0] * A[i], Negative[1]);        }        Positive[0] = max(A[i], Positive[0]);        Negative[0] = min(A[i], Negative[0]);    }    return Positive[2];}int main(){    int n;    cin >> n;    int tmp(0);    A.resize(n);    for (auto i = 0; i < n;++i)    {        cin >> A[i];    }    cout << func() << endl;    return 0;}