Little longer but very clear code


#1

Comment body goes here.int Solution::maxProduct(const vector &A)
{
int n = A.size();
if(n==1) return A[0];
int dp[2][n];//0th row for positive… 1st row for negative
if(A[0]<0)
{
dp[0][0]=0,dp[1][0]=A[0];
}
if(A[0]>0)
{
dp[0][0]=A[0],dp[1][0]=0;
}
if(A[0]==0)
{
dp[0][0]=0 ,dp[1][0]=0;
}
for(int i=1;i<n;i++)
{
if(A[i]==0)
{
dp[0][i]=0,dp[1][i]=0;
}

    else if(dp[0][i-1]==0 && dp[1][i-1]==0)
    {
        if(A[i]<0)
        {
            dp[0][i]=0,dp[1][i]=A[i];
        }
        if(A[i]>0)
        {
            dp[0][i]=A[i],dp[1][i]=0;
        }
        if(A[i]==0)
        {
            dp[0][i]=0 ,dp[1][i]=0;
        }
    }
    
    else if(dp[0][i-1]==0)
    {
        if(A[i]<0)
        {
            dp[0][i]=dp[1][i-1]*A[i];
            dp[1][i]=0;
        }
        else
        {
            dp[0][i]=A[i];
            dp[1][i]=dp[1][i-1]*A[i];
        }
        
    }
    else if(dp[1][i-1]==0)
    {
        if(A[i]>0)
        {
            dp[0][i]=dp[0][i-1]*A[i];
            dp[1][i]=0;
            
        }
        else
        {
            dp[1][i]=dp[0][i-1]*A[i];
            dp[0][i]=0;
        }
    }
    else
    {
        if(A[i]>0)
        {
            dp[0][i]=dp[0][i-1]*A[i];
            dp[1][i]=dp[1][i-1]*A[i];
        }
        else
        {
            dp[0][i]=dp[1][i-1]*A[i];
            dp[1][i]=dp[0][i-1]*A[i];
        }
    }
}
int ans=0;
for(int i=0;i<n;i++)
{
    ans=max(ans,max(dp[0][i],dp[1][i]));
}
return ans;

}