您的位置:首页 > 其它

获取数组中子串乘积的最大值

2015-09-21 17:17 232 查看
【题目】给定一个数组,例如arr = {-2.5, 4, 2, 3, 0, 8, 4}; 那个8和4相乘得到32,是连续数相乘得到的最大值,得到该值即可。

【解答】注意此过程的三种情况即可,最大数成为最大,最小数变成最大,当前数最大。时间复杂度O(n)。

public static double getMax(double[] arr)
{
if(arr == null || arr.length == 0)
{
return 0;
}
double max = arr[0];
double mix= arr[0];
double maxEnd = arr[0];
double mixEnd = arr[0];
double res = arr[0];
for (int i = 1; i < arr.length; i++)
{
maxEnd = max * arr[i];
mixEnd = mix * arr[i];
max = Math.max(Math.max(maxEnd, mixEnd), arr[i]); //三种情况:最大数最大,最小数变成最大,当前数最大
mix = Math.min(Math.min(maxEnd, mixEnd), arr[i]);
res = Math.max(res, max);
}
return res;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: