152. 乘积最大子数组
解题思路
本题要用动态规划,主要思路如下
代码
class Solution {
public int maxProduct(int[] nums) {
int n = nums.length;
if (n == 0) {
return 0;
}
// dpMax[i] 表示以第 i 个元素的结尾的子数组,乘积最大的值
int[] dpMax = new int[n];
dpMax[0] = nums[0];
// dpMin 来记录以第 i 个元素的结尾的子数组,乘积最小的值
int[] dpMin = new int[n];
dpMin[0] = nums[0];
int max = nums[0];
for (int i = 1; i < n; i++) {
dpMax[i] = Math.max(dpMin[i - 1] * nums[i], Math.max(dpMax[i - 1] * nums[i], nums[i]));
dpMin[i] = Math.min(dpMin[i - 1] * nums[i], Math.min(dpMax[i - 1] * nums[i], nums[i]));
max = Math.max(max, dpMax[i]);
}
return max;
}
}