思路:
关键就是处理负数,我们知道负数最小值*一个负数就变成最大值了,所以保存最大和最小值就行,
更新的时候就综合判断
class Solution {
public:
int dp1[100005];
int dp2[100005];
int maxProduct(vector<int>& nums) {
int ans=nums[0];
int n=nums.size();
dp1[0]=nums[0];
dp2[0]=nums[0];
for(int i=1;i<n;i++)
{
dp1[i]=nums[i];
dp2[i]=nums[i];
int t=dp1[i];
dp1[i]=max(dp1[i],max(dp1[i]*dp1[i-1],dp2[i]*dp2[i-1]));
dp2[i]=min(dp2[i],min(t*dp1[i-1],dp2[i]*dp2[i-1]));
ans=max(dp1[i],max(ans,dp2[i]));
}
return ans;
}
};