牛客堂刷题之最大乘积
2015-12-03 19:09
399 查看
题目:
给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。思路:
关于求连续子序列的问题,都是前 i 个元素对第 i+1个元素的推测。那么在0~~~i~~~N-1中,0~~~i中间的最大值是Max,最小值是Min
那么以 i+1 结尾的序列产生的最大值有三种情况:
1、Max * array[i+1],例如 2 3 4
2、Min * array[i+1],例如 -2 3 -4
3、array[i+1] ,例如 5 -2 3
所以设定一个全局最大的变量,首先比较这三个的大小,然后用最大的和全局最大的变量比较,大则替换.....
代码:
public static double getMaxProduct(double[] arr) { double res = arr[0]; double max = arr[0]; double min =arr[0]; double maxTemp=0; double minTemp=0 for(int i=1;i<arr.length;i++) { maxTemp = max * arr[i]; minTemp = min * arr[i]; max = Math.max(Math.max(maxTemp,minTemp),arr[i]); min = Math.min(Math.min(maxTemp, minTemp),arr[i]); res = Math.max(res, max); } return res; }
相关文章推荐
- 02-SpringMVC_获得用户请求
- Linux_LDAP+NFS+autofs
- 公钥和私钥
- 轻松学习JavaScript十:JavaScript的Date对象制作一个简易钟表
- Git 常用命令笔记
- 蓝桥杯算法提高 -- 金陵十三钗
- Android studio debug使用正式的签名
- Android PopupWindow with ListView的一些问题
- 阶乘
- ASP.NET]ASP.NET C# 用 Print2Flash 实现在线预览 Word、PPT、PDF 等
- oracle 基于PLSQL实现发送邮件 UTL_SMTL
- 快速排序
- 将浏览器窗口变成简单的文本编辑器
- Remove Element 移除元素
- 【HLG 1572】表达式计算
- 讲义7:运算符及函数
- 证明:二分图中的环只能是偶环,不可能是奇环
- 《疯狂JAVA讲义》——二维数组
- NYOJ 263 精 挑 细 选
- VVDocumenter 使用