要是知道了i-1结尾的最小累乘积min ,最大累乘积max, 那么y结尾的最大累乘积有三种可能
max * arr[i]
min * arr[i]
arr[i]
具体过程看代码实现:
package TT; public class Test79 { public static double maxProduct(double[] arr){ if(arr==null || arr.length ==0){ return 0; } double max = arr[0]; double min = arr[0]; double res = arr[0]; double maxEnd= 0; double minEnd = 0; for(int i =1; i<arr.length; ++i){ maxEnd = max*arr[i]; minEnd = min*arr[i]; max =Math.max(Math.max(maxEnd, minEnd), arr[i]); min = Math.min(Math.min(maxEnd, minEnd), arr[i]); res = Math.max(res, max); } return res; } public static void main(String[] args){ double[] arr = new double[7]; arr[0]=-2.5; arr[1]=4; arr[2]=0; arr[3]=3; arr[4]=0.5; arr[5]=8; arr[6]=-1; double x = maxProduct(arr); System.out.println(x); } }