ダイナミックプログラミング(最長増加部分列)---最長増加部分列

最長増加部分列

シーケンスを増やす300最長(中)

件名の説明:

  配列を指定して、その最長の増加サブシーケンスを見つけます

アイデアの分析:

  動的プログラミング、サブシーケンスの長さを増加させる最長DPストレージアレイを定義するために、DP [N-】最長増加系列長配列のSnの終わりで表されます。増加サブ{たSi1、Si2を、...、シム}ため、Imは<NとSIM <Snは、この場合には{たSi1、Si2を、...、SIM、Snは}増加するシーケンスでは、シーケンスを増加させる場合長さの増加。上記の条件を満足するシーケンスをインクリメント、見つけることである最長増加サブシーケンスの長さは、互いに配列で最も長い配列の長さを増加させる最長の終わりとしてSnを含むSNはインクリメントされて構成されています。したがって、{|のSi <Snの&& iがn <I] +1 DP} [N] = maxにDP。

コード:

public int lengthOfLIS(int []nums){
    if(nums==null||nums.length==0)
        return 0;
    int []dp=new int [nums.length];
    for(int i=0;i<nums.length;i++){
        int max=1;
        for(int j=0;j<i;j++){
            if(nums[i]>nums[j]){
                max=Math.max(max,dp[j]+1);
            }
        }
        dp[i]=max;
    }
    int res=dp[0];
    for(int i=1;i<nums.length;i++){
        if(dp[i]>res)
            res=dp[i];
    }
    return res;
}

おすすめ

転載: www.cnblogs.com/yjxyy/p/11119151.html