354. Russian Doll Envelopes
题目链接:https://leetcode.com/problems...
和300. Longest Increasing Subsequence类似的题,这里变成两个量了,依然是patient sort+binary search的思路。这里先按一个方向排序,另外一个方向按降序再排,这样就可以binary search了。
public class Solution {
public int maxEnvelopes(int[][] envelopes) {
if(envelopes.length == 0 || envelopes[0].length == 0) return 0;
Arrays.sort(envelopes, (a, b) -> a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]);
int n = envelopes.length;
int[] dp = new int[n+1];
int idx = 0;
for(int[] envelope : envelopes) {
if(envelope[1] > dp[idx]) dp[++idx] = envelope[1];
else if(envelope[1] <= dp[0]) dp[0] = envelope[1];
else {
int i = Arrays.binarySearch(dp, 0, idx+1, envelope[1]);
if(i < 0) i = -(i + 1);
dp[i] = envelope[1];
}
}
return idx;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。