leetcode做题总结,动态规划II(Maximum Subarray, Maximum Product Subarray)
2015-01-08 04:15
351 查看
这两道题都作出来了,但是代码冗长,于是我上网搜了一下,发现了非常简洁的做法,特此链接
http://blog.csdn.net/linhuanmars/article/details/21314059 http://blog.csdn.net/linhuanmars/article/details/39537283
主要思路是不使用矩阵,使用local和global变量来记录包含当前元素的局部最优解和到目前为止的全局最优解。
下面是我对第一题的解法,复杂度一样就是代码冗长
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; } }
相关文章推荐
- leedcode做题总结,动态规划II(Maximum Subarray,Maximum Product Subarray)
- 【LeetCode】Maximum Product Subarray
- leetcode-Maximum Product Subarray-ZZ
- Maximum Product Subarray [leetcode]
- LeetCode "Maximum Product Subarray"
- Leetcode Maximum Product Subarray
- 【Leetcode】Maximum Product Subarray
- leetcode-Maximum Product Subarray
- LeetCode:152_Maximum Product Subarray | 最大乘积连续子数组 | Medium
- Leetcode(152) Maximum Product Subarray
- LeetCode-Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- [Leetcode]Maximum Product Subarray
- leetcode Maximum Product Subarray
- Leetcode—Maximum Product Subarray
- Maximum Product Subarray -- LeetCode
- [LeetCode] Maximum Product Subarray的4种解法
- [leetcode]Maximum Product Subarray
- leetcode:Maximum Product Subarray
- [leetcode]Maximum Product Subarray最大子序列乘积