Java実装LeetCode 354マトリョーシカエンベロープ問題

354マトリョーシカエンベロープ問題

整数形式で、幅と高さは、いくつかのタグの幅と高さを指定されたエンベロープ(W、H)が表示されます。他のエンベロープビッグよりも幅と高さは、この時間を包むとき、あなたは同じロシアの人形のように、別の封筒に封筒を置くことができます。

計算はどのように多くの封筒アップ(別の封筒の内側に封筒を置くことができる)のグループ「ロシア人形」エンベロープを形成することができるようにします。

注:
なし回転封筒。

例:

入力:封筒= [5,4]、 [6,4]、[6,7]、[2,3]
出力:3
説明:封筒3の最大数の組み合わせ:[2,3] => [5,4] => [6,7]。

class Solution {
    public int maxEnvelopes(int[][] envelopes) {
int maxL = 0;
        int[] dp = new int[envelopes.length];
        Arrays.sort(envelopes, (a, b) -> (a[0] == b[0] ? b[1]-a[1] : a[0]-b[0]));
        
        for(int[] env : envelopes) {
            int lo = 0, hi = maxL;
            while(lo < hi) {
                int mid = lo+(hi-lo)/2;
                if(dp[mid] < env[1])
                    lo = mid+1;
                else
                    hi = mid;
            }
            dp[lo] = env[1];
            if(lo == maxL)
                maxL++;
        }
        return maxL;
    }
}
リリース1474元の記事 ウォンの賞賛10000 + ビュー180万+

おすすめ

転載: blog.csdn.net/a1439775520/article/details/104764682