獲取陣列中子串乘積的最大值

zxc123e發表於2015-09-21

【題目】給定一個陣列,例如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;

相關文章