【题目】给定一个数组,例如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;