给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
思路:对于以 i 结尾的子数组,如果 arr [i] 是正数,最大的连续子数组应该是乘上 i - 1位置的最大数或者其本身,如果 i 是负数,最大的连续子数组应该是乘上 i - 1 位置的最小数或者其本身。因此我们需要两个数组来保存变量,一个保存最大值,另外一个保存最小值。
class Solution {
public int maxProduct(int[] nums) {
int len = nums.length;
int[] f = new int[len];
int[] g = new int[len];
int res = Integer.MIN_VALUE;
for(int i = 0; i < len; i++){
f[i] = nums[i];
if(i > 0){
f[i] = Math.max(f[i], Math.max(f[i - i] * nums[i], g[i - 1] * nums[i]));
}
g[i] = nums[i];
if(i > 0){
g[i] = Math.min(g[i], Math.min(f[i - 1] * nums[i], g[i - 1] * nums[i]));
}
res = Math.max(res, f[i]);
}
return res;
}
}