您的位置:首页 > 其它

牛客堂刷题之最大乘积

2015-12-03 19:09 399 查看

题目:

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

思路:

关于求连续子序列的问题,都是前 i 个元素对第 i+1个元素的推测。

那么在0~~~i~~~N-1中,0~~~i中间的最大值是Max,最小值是Min

那么以 i+1 结尾的序列产生的最大值有三种情况:

1、Max * array[i+1],例如 2  3  4 

2、Min * array[i+1],例如 -2 3 -4

3、array[i+1]  ,例如 5 -2 3

所以设定一个全局最大的变量,首先比较这三个的大小,然后用最大的和全局最大的变量比较,大则替换.....

代码:

public static double getMaxProduct(double[] arr)
{
double res = arr[0];
double max = arr[0];
double min =arr[0];
double maxTemp=0;
double minTemp=0

for(int i=1;i<arr.length;i++)
{
maxTemp = max * arr[i];
minTemp = min * arr[i];
max = Math.max(Math.max(maxTemp,minTemp),arr[i]);
min = Math.min(Math.min(maxTemp, minTemp),arr[i]);
res = Math.max(res, max);

}

return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: