class Solution {
// 根据点对的第一个数进行冒泡排序
public void sort(int[][] pairs) {
for(int i=0;i<pairs.length-1;i++) {
for(int j=i+1;j<pairs.length;j++) {
if(pairs[i][0]>pairs[j][0]) {
int p=pairs[i][0];
int q=pairs[i][1];
pairs[i][0]=pairs[j][0];
pairs[j][0]=p;
pairs[i][1]=pairs[j][1];
pairs[j][1]=q;
}
}
}
}
public int findLongestChain(int[][] pairs) {
if(pairs==null || pairs.length==0) {
return 0;
}
sort(pairs);
int len=pairs.length;
int[] dp=new int[len];
dp[0]=1;
for(int i=1;i<len;i++) {
int temp=1;
for(int j=0;j<i;j++) {
if(pairs[j][1]<pairs[i][0]) {
temp=Math.max(temp, dp[j]+1);
}
}
dp[i]=temp;
}
int max=1;
for(int t : dp) {
max=Math.max(max, t);
}
return max;
}
}
改进一下排序的写法:
class Solution {
public int findLongestChain(int[][] pairs) {
if(pairs==null || pairs.length==0) {
return 0;
}
Arrays.sort(pairs, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0];
}
});
int len=pairs.length;
int[] dp=new int[len];
dp[0]=1;
for(int i=1;i<len;i++) {
int temp=1;
for(int j=0;j<i;j++) {
if(pairs[j][1]<pairs[i][0]) {
temp=Math.max(temp, dp[j]+1);
}
}
dp[i]=temp;
}
int max=1;
for(int t : dp) {
max=Math.max(max, t);
}
return max;
}
}