152. Maximum Product Subarray
152. Maximum Product Subarray
因为存在正负数相乘的问题,如果是负数,那么乘的记忆值越小越好,如果是正数,乘的记忆值越大越好,因此这里我们需要记录两个值,当前下标前的最小值和下标前的最大值
int maxProduct(vector<int>& nums) {
int res=nums[0];
for(int i=1, mi=nums[0], ma=nums[0];i<nums.size();++i) {
if (nums[i]<0) swap(mi, ma);
mi = min(nums[i], mi*nums[i]);
ma = max(nums[i], ma*nums[i]);
res = max(ma, res);
}
return res;
}#DP