求连续子数组的最大乘积。相关题目:Leetcode 152. Maximum Product Subarray
题目:给定一个double类型的数组arr,其中的元素可正、可负、可0,返回子数组的最大乘积。如 arr=[-2.5, 4, 0, 3, 0.5, 8, -1],子数组[3, 0.5, 8]累乘积可以获得最大值12.
算法:动态规划
设以arr[i-1]结尾的最小累成积min,以a[i-1]结尾的最大累成积为max,那么以arr[i]结尾的最大累乘积只有以下三种可能:
- max(arr[1]) * arr[2],如[3, 4, 5]
- min(arr[1]) * arr[2],如[-2, 3, -4]
- arr[2],如[0.1 ,0.1, 100]
这三种结果中最大的就作为以arr[i]的最大累乘积,最小的作为arr[i]的最小累乘机,然后再计算arr[i+1]。
结果 = Max{以arr[0]结尾的所有子数组的最大累乘积, 以arr[1]结尾的所有子数组的最大累乘积, … , 以arr[arr.length - 1]结尾的所有子数组的最大累乘积}
1 | public double maxProduct(double[] arr) { |