给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。
public class maxProduct{
public double maxProduct(double[] arr) {
if(arr == null || arr.length <= 0){
return 0.0;
}
int len = arr.length;
double[] max = new double[len];
double[] min = new double[len];
max[0] = min[0] = arr[0];
for(int i=1;i<len;i++){
max[i] = Math.max(arr[i],Math.max(max[i-1] * arr[i],min[i-1]*arr[i]));
min[i] = Math.min(arr[i],Math.min(max[i-1] * arr[i],min[i-1]*arr[i]));
}
double m = max[0];
for(int i=1;i<len;i++){
m = m>max[i]?m:max[i];
}
return m;
}
}