题解 | #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);
}
}
华为机试题解 文章被收录于专栏
华为机试题解

