算法笔记_133:最大连续乘积子数组(Java)

目录

1 问题描述

2 解决方案

2.1 蛮力法

2.2 动态规划法

 

 


1 问题描述

给定一个浮点数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组。

 

 


2 解决方案

2.1 蛮力法

该方法的时间复杂度为O(n^2)

具体代码如下:

package com.liuzhen.practice;

public class Main {
    
    public void getResult(double[] A) {
        double max = 1;
        for(int i = 0;i < A.length;i++) {
            double temp = 1;
            for(int j = i;j < A.length;j++) {
                temp = temp * A[j];
                if(temp > max)
                    max = temp;
            }
        }
        System.out.println(max);
        return;
    }
    
    public static void main(String[] args) {
        Main test = new Main();
        double[] A = {-2.5,4,0,3,0.5,8,-1};
        test.getResult(A);
    }
}

 

运行结果:

12.0

 

2.2 动态规划法

该方法的时间复杂度为O(n)

具体代码如下:

package com.liuzhen.practice;

public class Main1 {
    
    public void getResult(double[] A) {
        double result = 1;
        double max = 1, min = 1;
        for(int i = 0;i < A.length;i++) {
            max = Math.max(max * A[i], Math.max(min * A[i], A[i]));
            min = Math.min(max * A[i], Math.min(min * A[i], A[i]));
            if(max > result)
                result = max;
        }
        System.out.println(result);
        return;
    }
    
    public static void main(String[] args) {
        Main1 test = new Main1();
        double[] A = {-2.5,4,0,3,0.5,8,-1};
        test.getResult(A);
    }
}

 

运行结果:

12.0

 

 

 

 

参考资料:

   1.《编程之法面试和算法心得》  July

 

posted @ 2017-04-18 17:04  舞动的心  阅读(588)  评论(0编辑  收藏  举报