问题:
给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。
例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。
思路:
设置两个变量用来记录以该结点作为乘积结尾的最大值和最小值,每次都是求取上次最大值和最小值与此次结点乘积的最大值最小值
代码:
// 求子数组累乘的最大乘积
double getMaxProduct(double *arr, int n){
double minResult = arr[0];
double maxResult = arr[0];
double maxRe=arr[0];
for(int i = 1; i < n; i++){
double temp = max(arr[i], max(maxResult*arr[i], maxResult*arr[i]));
minResult = min(arr[i], min(maxResult*arr[i], minResult*arr[i]));
maxResult = temp;
maxRe = max(maxRe, maxResult);
}
return maxRe;
}