/*
dp[i]表示到i为止的最大乘机
dp[i]=max(dp[i-1]*num[i],num[i]);
dp[i]=之前的dp值乘上num[i]或者不乘
由于有负数在维护一个dpmin[],当为负数时交换
*/
class Solution {
public:
int maxProduct(vector<int>& nums) {
int ans=-100000000;
int max1=1;
int min1=1;
for(int i=0;i<nums.size();i++)
{
if(nums[i]<0) swap(max1,min1);
max1=max(max1*nums[i],nums[i]);
min1=min(min1*nums[i],nums[i]);
ans=max(max1,ans);
}
return ans;
}
};