子数组最大乘积

给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。

public class Solution {
    public 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 tmp1 = 0;
    	double tmp2 = 0;
    	for (int i = 1; i < arr.length; i++) {
			tmp1 = max * arr[i];
			tmp2 = min * arr[i];
			max = Math.max(Math.max(tmp1, tmp2), arr[i]);
			min = Math.min(Math.min(tmp1, tmp2), arr[i]);
			res = Math.max(max, res);
		}
    	return res;
    }
}

 

猜你喜欢

转载自hcx2013.iteye.com/blog/2240415