问题描述(原题链接)
给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
代码:
class Solution {
public int maxProduct(int[] nums) {
int len = nums.length;
//利用dp
if(len==0)
return 0;
int res = Integer.MIN_VALUE;
int[] dpMax = new int[len];
int[] dpMin = new int[len];
dpMax[0]=nums[0];dpMin[0]=nums[0];
res=nums[0];
for(int i=1;i<len;i++){
dpMax[i]=Math.max(dpMax[i-1]*nums[i],Math.max(dpMin[i-1]*nums[i],nums[i]));
dpMin[i]=Math.min(dpMax[i-1]*nums[i],Math.min(dpMin[i-1]*nums[i],nums[i]));
res=Math.max(res,dpMax[i]);
}
return res==Integer.MIN_VALUE?nums[0]:res;
}
}