目录

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 著

算法笔记_133:最大连续乘积子数组(Java)的更多相关文章

  1. Java实现 LeetCode 523 连续的子数组和(ง •_•)ง

    523. 连续的子数组和 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数. 示 ...

  2. 算法笔记_043:最大连续子数组和(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力枚举法 2.2 动态规划法   1 问题描述 给定一个整数数组,数组里可能有正数.负数和零.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和 ...

  3. 【算法Everyday】第二日 求子数组的最大和

    题目 // 3.求子数组的最大和 // 题目: // 输入一个整形数组,数组里有正数也有负数. // 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. // 求所有子数组的和的最大值. ...

  4. [LeetCode] Continuous Subarray Sum 连续的子数组之和

    Given a list of non-negative numbers and a target integer k, write a function to check if the array ...

  5. 算法进阶面试题07——求子数组的最大异或和(前缀树)、换钱的方法数(递归改dp最全套路解说)、纸牌博弈、机器人行走问题

    主要讲第五课的内容前缀树应用和第六课内容暴力递归改动态规划的最全步骤 第一题 给定一个数组,求子数组的最大异或和. 一个数组的异或和为,数组中所有的数异或起来的结果. 简单的前缀树应用 暴力方法: 先 ...

  6. 152. Maximum Product Subarray最大乘积子数组/是否连续

    [抄题]: Given an integer array nums, find the contiguous subarray within an array (containing at least ...

  7. [Swift]LeetCode523. 连续的子数组和 | Continuous Subarray Sum

    Given a list of non-negative numbers and a target integer k, write a function to check if the array ...

  8. 算法笔记_052:蓝桥杯练习Multithreading(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 现有如下一个算法: repeat ni times yi := y y := yi+1 end repeat 令n[1]为你需要算加法的第 ...

  9. 算法笔记_013:汉诺塔问题(Java递归法和非递归法)

    目录 1 问题描述 2 解决方案  2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...

随机推荐

  1. .net中session的使用

    什么是Session? Session即会话,是指一个用户在一段时间内对某一个站点的一次访问. Session对象在.NET中对应HttpSessionState类,表示"会话状态" ...

  2. vijos Warcraft III 守望者的烦恼

    题解 转移方程好写吧 一个一维递推式 然后我们可以构造矩阵优化 嗯,最近学一下递推优化 代码 #include<cstdio> #include<cstring> #inclu ...

  3. hdu 1711

    读入优化有3s多. #include <cstdio> #include <cctype> #define maxn 1000010 #define maxm 10010 in ...

  4. 不错的VS2010扩展——JSEnhancements,让js和css也折叠

    在Visaul Studio 2010中写js或css代码,缺少像写C#代码时的那种折叠功能,当代码比较多时,就很不方便. 今天发现,已经有VS2010扩展支持这个功能,它就是——JSEnhancem ...

  5. Django Pagination

    Django provides a few classes that help you manage paginated data – that is, data that’s split acros ...

  6. Android Zxing调整扫描区域 优化取图速度

    Zxing 是google提供的二维码扫描project Demo本身默认的扫图区域最大仅仅有 360*480    须要拉开非常远的距离才干将整个二维码扫描到 因此须要我们自己调整取图大小 在Cam ...

  7. How to put a relative path for a DLL statically loaded?

    How to put a relative path for a DLL statically loaded? I have a DLL made in Delphi 7/Windows XP tha ...

  8. LINQ中的动态排序

    使用Linq动态属性排序 使用反射: public static Func<T,Tkey> DynamicLambda<T, Tkey>(string propertyName ...

  9. 根据url下载图片和页面

    需要将&tp=webp&wxfrom=5去掉,既可以在任何地方显示,也可以下载了 http://mmbiz.qpic.cn/mmbiz_jpg/bf8pC39RBhGFOH1ib9Ac ...

  10. git hub的GUI软件配置与使用

    1. 安装两个软件 1. git的命令行程序--git for windows:http://git-scm.com/download/win 2. git的GUI程序--tortoisegit:ht ...