题目描述:
代码如下:
class Solution {
public int maxEnvelopes(int[][] envelopes) {
//[w][h] 处理,对w升序,对h降序 因为对于相同w只能放入一个 相当于一个一维的最长子序列
Arrays.sort(envelopes, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]==o2[0]?o2[1]-o1[1]:o1[0]-o2[0];//如果w升序,如果w相同,h降序
}
});
//排好之后对高度取最长子序列
int n=envelopes.length;
int dp[]=new int[n];
Arrays.fill(dp, 1);
for (int i = 0; i <n ; i++) {
for (int j = 0; j < i; j++) {
if(envelopes[i][1]>envelopes[j][1]){
dp[i]=Math.max(dp[i],dp[j]+1);
}
}
}
int res=0;
for (int k = 0; k < n; k++) {
res=Math.max(res,dp[k]);
}
return res;
}
}