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
原创粉丝点击