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;
}
}