给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。
import java.util.*;
public class Solution {
public double maxProduct(double[] arr) {
if(arr.length == 0) return 0;
double min = arr[0];
double max = min;
double res = min;
for(int i = 1;i < arr.length;i++){
double t_max = max;
//最大值可能有三种情况 要么是 arr[i] arr[i]*max arr[i]*min
max = Math.max(Math.max(arr[i],max*arr[i]),arr[i]*min);
//更新最小值
min = Math.min(Math.min(arr[i],t_max*arr[i]),arr[i]*min);
//保存结果
res = Math.max(max,res);
}
return res;
}
}