这道题目和最大子数组和还不一样,相乘需要考虑负负得正的问题!最大子数组和只需要记住前面的最大值就行!这里需要同时记住最小值!
思路如下图所示
public class Problem_152_MaximumProductSubarray {
public int maxProduct(int[] nums) {
int maxMps [] = new int[nums.length];
int minMps [] = new int[nums.length];
int ans = nums[0];
maxMps[0] = nums[0];
minMps[0] = nums[0];
for (int i = 1; i < nums.length; i++) {
maxMps[i] = Math.max(maxMps[i - 1] * nums[i],Math.max(nums[i],minMps[i - 1] * nums[i]));
minMps[i] = Math.min(minMps[i - 1] * nums[i],Math.min(nums[i],maxMps[ i - 1] * nums[i]));
ans = Math.max(ans,maxMps[i]);
}
return ans;
}
//空间压缩!
}