题解 | #Redraiment的走法#
Redraiment的走法
https://www.nowcoder.com/practice/24e6243b9f0446b081b1d6d32f2aa3aa
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[] arr = new int[num]; for (int i = 0; i < num; i++) { arr[i] = sc.nextInt(); } /* * 改题为求最长子序列的问题 * 1、首先,定义一个数组dp用于存储当前点的最长子序列,默认为1(若没有子序列,自己算做1) * 2、使用两个下标i、j(i>j)当arr[i]>arr[j])时,计算dp[i] = Math.max(dp[i],dp[j]+1); */ int[] dp = new int[num]; Arrays.fill(dp,1);//数组元素值默认都为1 int max = 0; for (int i = 0; i < num; i++) { for (int j = 0; j < i; j++) { if (arr[i]>arr[j]){ dp[i] = Math.max(dp[i],dp[j]+1); //max = Math.max(dp[i],max); } } } Arrays.sort(dp); max = dp[num-1]; System.out.println(max); } }