题解 | #Redraiment的走法#
Redraiment的走法
https://www.nowcoder.com/practice/24e6243b9f0446b081b1d6d32f2aa3aa
这道题还是比较难的, 我最先开始想到的也是, dp[i]代表前i个的最长上升子序列, 或以第i个字符结尾的最长上升子序列, 但是没有深入分析. 深入分析了也没有做出来, 因为分析方法不对, 需要在前面的字符上面添加这个字符, 而且还需要一次循环, 不是简简单单的一个动态转移方程. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int []arr = new int[n]; //dp数组为第i个元素结尾的最长上升子序列 int []dp = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); dp[i] = 1; } //2 5 1 5 4 5 for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if( arr[i]>arr[j] ) { dp[i] = Math.max( dp[i], dp[j]+1 ); } } } int max = 0; for (int i = 0; i < n; i++) { if(dp[i] > max) max = dp[i]; } System.out.println(max); } }
华为机试题解 文章被收录于专栏
华为机试题解