leetcode做题总结,动态规划II(Maximum Subarray, Maximum Product Subarray)
来源:互联网 发布:万象数据库修改工具 编辑:程序博客网 时间:2024/06/08 05:21
这两道题都作出来了,但是代码冗长,于是我上网搜了一下,发现了非常简洁的做法,特此链接
http://blog.csdn.net/linhuanmars/article/details/21314059
http://blog.csdn.net/linhuanmars/article/details/39537283
主要思路是不使用矩阵,使用local和global变量来记录包含当前元素的局部最优解和到目前为止的全局最优解。
public int maxSubArray(int[] A) { if(A==null || A.length==0) return 0; int global = A[0]; int local = A[0]; for(int i=1;i<A.length;i++) { local = Math.max(A[i],local+A[i]); global = Math.max(local,global); } return global;}
public class Solution { public int maxProduct(int[] A) { if(A==null || A.length==0) return 0; if(A.length == 1) return A[0]; int max_local = A[0]; int min_local = A[0]; int global = A[0]; for(int i=1;i<A.length;i++) { int max_copy = max_local; max_local = Math.max(Math.max(A[i]*max_local, A[i]), A[i]*min_local); min_local = Math.min(Math.min(A[i]*max_copy, A[i]), A[i]*min_local); global = Math.max(global, max_local); } return global; }}
下面是我对第一题的解法,复杂度一样就是代码冗长
public class Solution { public int maxSubArray(int[] A) { if(A.length==0) return 0; int max=A[0],record=0; boolean tmp=false; for(int i=0;i<A.length-1;i++){ if(!tmp&&max<=0&&A[i]>max)max=A[i]; if(!tmp&&A[i]>0){ //start=i; record=0; tmp=true; } if(tmp&&((record+A[i]+A[i+1])>=0)){ record+=A[i]; max=max>record?max:record; }else if(tmp&&((record+A[i]+A[i+1])<0)){ record+=A[i]; max=max>record?max:record; record=0; tmp=false; } } if(tmp){ record+=A[A.length-1]; max=max>record?max:record; }else{ max=max>A[A.length-1]?max:A[A.length-1]; } return max; }}
0 0
- leetcode做题总结,动态规划II(Maximum Subarray, Maximum Product Subarray)
- leedcode做题总结,动态规划II(Maximum Subarray,Maximum Product Subarray)
- 【Leetcode】152. Maximum Product Subarray 【动态规划】
- (动态规划)LeetCode#152. Maximum Product Subarray
- Leetcode 动态规划 Maximum Subarray
- leetcode---Maximum Subarray---动态规划
- Maximum Product Subarray 【LeetCode】
- [LeetCode] Maximum Product Subarray
- leetcode-Maximum Product Subarray
- Maximum Product Subarray -- LeetCode
- LeetCode-Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- 【LeetCode】Maximum Product Subarray
- leetcode:Maximum Product Subarray
- leetcode: Maximum Product Subarray
- Leetcode: Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- boost的编译安装 以及boost regex的使用
- 远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
- Ruby Thin服务器——比Rails自带的Webrick快不止一个档次!
- 串口通信资料整理
- Maximum Subarray问题
- leetcode做题总结,动态规划II(Maximum Subarray, Maximum Product Subarray)
- LeetCode刷题笔录dungeon game
- linux ntfs磁盘挂载
- Min Stack
- Leetcode - Reverse Integer
- leetcode-3 closest
- leetcode-4sum
- leetcode-generate parentheses
- 2015-1-7