1,牛客网第一题:这其实跟找最长递增子序列是一个东西。注意的地方是,返回的是最大的dp,而不是dp[N-1]。
答案:
public static int getHeight(int[] men, int n) {
// write code here
int res = 0;
int[] dp = new int[n];
dp[0] = 1;
for(int i =1;i <n;i++){
int max = 0;
for(int j =0;j < i;j++){
if(men[j] < men[i]){
max = Math.max(max, dp[j]);
}
}
dp[i] = max + 1;
res = Math.max(res, dp[i]);
} return res; }
2牛客网第二题:多了一个条件,身高,那就先对单一元素排序,在进行dp。
public static int getHeight(int[][] men, int n) {
// write code here
for (int i = 0; i < n; i ++) {
for (int j = 1; j < n - i; j ++) {
if (men[j][0] < men[j-1][0]) {
int temp = men[j][0];
men[j][0] = men[j-1][0];
men[j-1][0] = temp; int temp1 = men[j][1];
men[j][1] = men[j-1][1];
men[j-1][1] = temp1;
} }
}
System.out.println(men[1][0]); int res = 0;
int[] dp = new int[n];
dp[0] = 1;
for(int i =1;i <n;i++){
int max = 0;
for(int j =0;j < i;j++){
if( men[j][1] < men[i][1]){
max = Math.max(max, dp[j]);
}
}
dp[i] = max + 1;
res = Math.max(res, dp[i]);
} return res; }