LeetCode Maximum Product Subarray 解题报告
https://oj.leetcode.com/problems/maximum-product-subarray/
题目分析:求一个数组,连续子数组的最大乘积。
解题思路:最简单的思路就是3重循环。求解productArray[i][j]的值(productArray[i][j]为A[i]到A[j]的乘积),然后记录当中最大值,算法时间复杂度O(n3)。必定TLE。
第一次优化,动态规划。求解:productArray[i][j]的时候不用再次循环从i到j。而是利用:productArray[i][j]=productArray[i][j-1]*A[j];採用递推的方法来计算,算法时间复杂度为O(n2),遗憾的是也TLE了。
public class Solution {public int maxProduct(int A[]) {if(A==null||A.length==0) {return 0;}int[][] productArray = new int[A.length][A.length];int maxProduct = A[0];for(int i=0;i<A.length;i++) {for(int j=i;j<A.length;j++) {if(j==i) {productArray[i][i] = A[i];} else {productArray[i][j] = productArray[i][j-1]*A[j];}if(productArray[i][j]>maxProduct) {maxProduct = productArray[i][i];}}}return maxProduct;}
}
第二次优化。事实上子数组乘积最大值的可能性为:累乘的最大值碰到了一个正数;或者。累乘的最小值(负数),碰到了一个负数。所以每次要保存累乘的最大(正数)和最小值(负数)。同一时候另一个选择起点的逻辑。假设之前的最大和最小值同当前元素相乘之后,没有当前元素大(或小)那么当前元素就可作为新的起点。比如,前一个元素为0的情况,{1,0,9,2}。到9的时候9应该作为一个最大值,也就是新的起点。{1,0,-9,-2}也是相同道理,-9比当前最小值还小,所以更新为当前最小值。
这样的方法仅仅须要遍历一次数组就可以,算法时间复杂度为O(n)。
public class Solution {public int maxProduct(int A[]) {if(A==null||A.length==0) {return 0;}int maxProduct = A[0];int max_temp = A[0];int min_temp = A[0];for(int i=1;i<A.length;i++) {int a = A[i]*max_temp;int b = A[i]*min_temp;max_temp = Math.max(Math.max(a,b), A[i]);min_temp = Math.min(Math.min(a,b), A[i]);maxProduct = Math.max(maxProduct, max_temp);}return maxProduct;}
}
LeetCode Maximum Product Subarray 解题报告相关推荐
- LeetCode Maximum Product Subarray(最大子数组乘积)
Find the contiguous subarray within an array (containing at least one number) which has the large ...
- LeetCode: Maximum Product Subarray
很久没练只能看别人代码了 1 class Solution { 2 public: 3 int maxProduct(int A[], int n) { 4 if (n == 0) return 0; ...
- 【LeetCode】Maximum Product Subarray 求连续子数组使其乘积最大
Add Date 2014-09-23 Maximum Product Subarray Find the contiguous subarray within an array (containin ...
- LeetCode 152. Maximum Product Subarray
152. Maximum Product Subarray Find the contiguous subarray within an array (containing at least one ...
- 【LeetCode】152. Maximum Product Subarray
题目: Find the contiguous subarray within an array (containing at least one number) which has the larg ...
- 【LeetCode】3Sum Closest 解题报告
[题目] Given an array S of n integers, find three integers in S such that the sum is closest to a give ...
- LeetCode Maximum Product of Word Lengths(位操作)
问题:给出一个字符串数组,要求求出两个没有共同字符的字符串的最大积 思路:第一种方法是直接枚举任意两个字符串,看是否有公共字符,如果没有,则计算乘积,并更新最大值. 第二种方法,因为字符范围是a-z, ...
- Maximum Product Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- LeetCode: Maximum Subarray 解题报告
Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which ...
最新文章
- 基于django的视频点播网站开发-step12-后台订阅功能
- 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第1章-绪论
- 减一天_一个动作减全身,一天比一天瘦,比跑3000米效果还好
- 总结面试题——Javascript
- junit测试方法_JUnit测试方法订购
- cmake取消宏定义_Excel基础丨取消excel中宏安全提示框
- 1064金明的预算方案
- c语言程序设计小学期论文,c语言程序设计小学期.pdf
- javascript动态字母
- D3实战(1):力导向图
- 查看sql语句执行时间/测试sql语句性能
- 网络层-IP地址和MAC地址
- 【OCP题库-12c】最新CUUG OCP 071考试题库(71题)
- Scrapy框架爬取豆瓣电影top250信息
- 压缩包文件的解压密码如何破解
- DNS 的工作原理——域名系统
- 关于医学影像中的轴位面(横断面)、冠状面、矢状面
- 我的python学习之路
- HTML跨年代码[源码]
- 使用笔记:AWTK中文键盘按键字体加大
热门文章
- java程序员就业发展方向_Java程序员有哪些职业发展方向?
- mysql的分类有哪些_MYSQL查询所有的分类,以及每个分类下面所有的文章?
- 字典 选取前100_100道 Python 经典练习题004
- groupadd r mysql_MySQL三种安装方式大揭秘
- python 调用 .netcore api_浅谈Python调用XBee的API来进行通讯
- 语义分割和实例分割_2019 语义分割指南
- 360压缩电脑版_震惊!360竟然出了一款这么良心的软件
- delphi 检测网络是否连通_WebRTC:连接建立过程的网络穿透
- 系统学习NLP(十二)--文本表示综述
- 目标检测(二十三)--DenseBox