套娃
思路
先排序,然后求最长递增子序列。
按 w 升序排序, 对于宽度 w 相同的数对,要对其高度 h 进行降序排序。
代码
var maxEnvelopes = function(envelopes) {
envelopes.sort(function(x, y){
if(x[0]<y[0]){
return -1;
}else if(x[0]>y[0]){
return 1;
}else if(x[0]==y[0]){
return y[1]-x[1];
}
});
console.log(envelopes);
let m = envelopes.length;
let dp = new Array(m).fill(0);
dp[0] = 1;
for(let i=1; i<m; i++){
dp[i] = 1;
for(let j=0; j<i; j++){
if(envelopes[j][1]<envelopes[i][1]){
dp[i] = Math.max(dp[i], dp[j]+1);
}
}
}
console.log(dp);
return Math.max(...dp);
};