class Solution {
public int maxEnvelopes(int[][] envelopes) {
//對二維數組進行排序
//首先對w(寬度) 進行升序排序
//這樣我們就可以根據h(高度) 就行求最長的升序序列數 就是最後的結果值
//但是有一個情況是 同等的寬度 是不能嵌套裝到信封裏 所以我們要降序 這樣計算最長的升序數列的時候
//同樣的寬度的信封 都會被過濾掉
Arrays.sort(envelopes, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0]) {
return o2[1] - o1[1];
}else {
return o1[0] - o2[0];
}
}
});
int [] arr = new int[envelopes.length];
for (int i = 0; i < envelopes.length; i++) {
arr[i] = envelopes[i][1];
}
return lengthOfLIS(arr);
}
public int lengthOfLIS(int[] nums) {
int[] dp = new int[nums.length];
int len = 0;
for (int num : nums) {
int i = Arrays.binarySearch(dp, 0, len, num);
if (i < 0) {
i = -(i + 1);
}
dp[i] = num;
if (i == len) {
len++;
}
}
return len;
}
}