動的プログラミング(配列間隔)の数---インクリメンタルサブ間隔のアレイとの間の中程度の差

サブインクリメントの数との間の中距離差のアレイ

413算術スライス(中)

A = [0, 1, 2, 3, 4]

return: 6, for 3 arithmetic slices in A:

[0, 1, 2],
[1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3, 4],
[ 1, 2, 3, 4],
[2, 3, 4]

件名の説明:

  配列を考えると、メディア部分区間差列を求めるの数が増加します。

アイデアの分析:

  DPを有する動的プログラミング、[I]が配列の終わりに[i]はどれだけ増分演算部で表されます。場合[I] - [I-1] == A [I-1] - [I-2]、次に[A [I-2]、A [I-1]、A [I]構成サブ区間演算刻み。新しい部分区間がインクリメントされるだけでなくへの[I-1]部分区間プラス[I]の端を越えてインクリメントされ、形成されてもよいです。

  综上、在A [1] - [I-1] == A [I-1] - [I-2]时、DP [I] = DP [I-1] + 1。

  インクリメンタルサブ間隔は必ずしもないので、ほとんどの要素の端部は端に任意の要素とすることができ、累積結果DPアレイを戻す必要があります。

コード:

public int numberOfArithmeticSlices(int []A){
    if(A==null||A.length==0)
        return 0;
    int []dp=new int [A.length];
    for(int i=2;i<A.length;i++){
        if(A[i]-A[i-1]==A[i-1]-A[i-2]){
            dp[i]=dp[i-1]+1;
        }
    }
    int res=0;
    for(int cnt:dp)
        res=res+cnt;
    return res;
}

おすすめ

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