class Solution {
public:
int maxProduct(vector& nums) {
if(nums.size()==1)
return nums[0];
vector<int>pp(nums.size()+1,1);
vector<int>np(nums.size()+1,1);
bool haspos=false;
bool haszero=false;
int i=1;
for(auto x:nums)
{if(x==0)
{haszero=true;
pp[i]=1;
np[i]=1;
}
else if(x<0)
{if(np[i-1]==1)
pp[i]=1;
else
pp[i]=np[i-1]*x;
np[i]=pp[i-1]*x;
}
else
{haspos=true;
if(np[i-1]==1)
np[i]=1;
else
np[i]=np[i-1]*x;
pp[i]=pp[i-1]*x;
}
i++;
}
int maxpr=INT_MIN;
for(auto x:pp)
maxpr=max(maxpr,x);
if(maxpr==1)
{if(haspos)return 1;
if(haszero)return 0;
}
return maxpr;
}
};