var maxEnvelopes = function(envelopes) { if (envelopes.length === 0) { return 0; } const n = envelopes.length; envelopes.sort((e1, e2) => { if (e1[0] !== e2[0]) { return e1[0] - e2[0]; } else { return e2[1] - e1[1]; } }) const f = new Array(n).fill(1); let ans = 1; for (let i = 1; i < n; ++i) { for (let j = 0; j < i; ++j) { if (envelopes[j][1] < envelopes[i][1]) { f[i] = Math.max(f[i], f[j] + 1); } } ans = Math.max(ans, f[i]); } return ans;};
var maxEnvelopes = function(envelopes) {
if (envelopes.length === 0) {
return 0;
}
const n = envelopes.length;
envelopes.sort((e1, e2) => {
if (e1[0] - e2[0]) {
return e1[0] - e2[0];
} else {
return e2[1] - e1[1];
}
})
const f = [envelopes[0][1]];
for (let i = 1; i < n; ++i) {
const num = envelopes[i][1];
if (num > f[f.length - 1]) {
f.push(num);
} else {
const index = binarySearch(f, num);
f[index] = num;
}
}
return f.length;
}
const binarySearch = (f, target) => {
let low = 0, high = f.length - 1;
while (low < high) {
const mid = Math.floor((high - low) / 2) + low;
if (f[mid] < target) {
low = mid + 1;
} else {
high = mid;
}
}
return low;
};