ピラミッドII

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/iov3Rain/article/details/90243346

タイトル説明

ピラミッドは、人が別の肩の上に立つべきではよく知られているゲームです。より安定したロハンにマウントするために、我々はより軽くダウン下記より上の人をさせてください。今、視覚効果のために、このプログラムを実行するには、サーカス、我々はまた、上記の人より背が高い、次の人が必要です。全ての関係者が同時に存在する場合に注意して、人々の最大数は折り畳むことができる計算するアルゴリズムを記述してください。

俳優の二次元のINT配列を指定し、各要素は、演技者の身長と体重を表し、2つの値を有します。同時に、nは与えられた俳優の合計数は、数スタックまで遡ります。総数に等しい保証が500未満です。

試験サンプル:

[1,2]、[3,4]、[5,6]、[7,8]、4

戻り値:4

 

配列改変を立ち上がります。問題のピラミッドでI、一緒に新しい条件付き。

ここではピラミッドI異なるアクターがすべて同時にです。

2次元1次元に変換されます。多次元次元削減、複雑さと難しさを軽減。

重量のシーケンスの結果が小から大に順序付けされなければならないので、ソートまず体重、身長とによって、増加したシーケンスを求めます。

ターンでは、も可能です。

 

class Stack {
public:
    int getHeight(vector<vector<int> > actors, int n) {
        // write code here
        if(n <= 0)
            return 0;
        sort(actors.begin(), actors.end(), [](vector<int> &v1, vector<int> &v2) ->bool{
            return v1[0] < v2[0];});
        vector<int> dp(n, 1);
        int ans = 1;
        for(int i = 0; i < n; ++i)
        {
            for(int j = 0; j < i; ++j)
            {
                if(actors[i][1] > actors[j][1])
                    dp[i] = max(dp[i], dp[j] + 1);
            }
            ans = max(dp[i], ans);
        }
        return ans;
    }
};

 

おすすめ

転載: blog.csdn.net/iov3Rain/article/details/90243346