算法总结之 数组中子数组的最大累乘积
要是知道了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); } }

本文介绍了一种求解数组中子数组最大累乘积的方法。通过动态规划思想,跟踪当前最大与最小值来应对负数翻转情况,最终找到整个数组中的最大累乘积。
5万+

被折叠的 条评论
为什么被折叠?



