题解 | #Redraiment的走法#
Redraiment的走法
https://www.nowcoder.com/practice/24e6243b9f0446b081b1d6d32f2aa3aa
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String line2 = scanner.nextLine();
String[] s = line2.split(" ");
int[] num = new int[s.length];
for (int i = 0; i < s.length; i++) {
num[i] = Integer.parseInt(s[i]);
}
int[] dp = new int[num.length];
for (int i = 0; i < num.length; i++) {
dp[i] = 1;
//i 控制引入元素,引入 1个 2个 3个 4个 .....
for (int j = i - 1; j >= 0; j--) {
// 内层循环 和前面i-1个元素逐个比较
if (num[i] > num[j]) {
// 更新dp值
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
int max = -1;
for (int i = 0; i < num.length; i++) {
if (dp[i] > max) {
max = dp[i];
}
}
System.out.println(max);
// 6
// 2 5 1 5 4 5
// 0 1 2 3 4 5
// dp[i] 表示以i为结尾的最长子序列的长度
// 当只有一个元素 [2]
// dp[0]=1
// 加入元素5 ,[2,5]
// dp[0]=1 ,d[1]=d[0]+1=2 5比2大,所以可以在2的基础上加
// 加入元素1 ,[2,5,1]
// dp[0]=1 ,d[1]=2 d[2]=1
// 加入元素5 ,[2,5,1,5]
// dp[0]=1 ,d[1]=2 d[2]=1, d[3]=max{d[0]+1,d[2]+1}=2
// 加入元素4 ,[2,5,1,5,4]
// dp[0]=1 ,d[1]=2 d[2]=1, d[3]=2, d4=max{d[0]+1,d[2]+1,}=2
// 加入元素5 ,[2,5,1,5,4,5]
// dp[0]=1 ,d[1]=2 d[2]=1, d[3]=2, d[4]=2,d5=max{d[0]+1,d[2]+1,d[4]+1}=3
// dp[0]=1 ,d[1]=2 d[2]=1, d[3]=2, d[4]=2,d[5]=3
}
}

腾讯音乐娱乐集团公司福利 285人发布