1.题目
2.基本思想
最重要的就是搞清楚 dp 数组的定义和 递推关系
dp数组的定义:dp[i] :以 a[i] 结尾数字中,最长上升子序列的长度为 dp[i]
3.代码实现
时间复杂读:O(n ^ 2)
import java.io.*;
import java.util.Arrays;
public class _895最长上升子序列 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
int[] arr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int dp[]=new int[n];//dp[i] 表示为以第i+1个位结束的最长上升子序列
for (int i=0;i<n;i++){
dp[i]=1;//初始化每个dp[i]=1 至少本身就是一个
for (int j=0;j<i;j++){
//从起始位置开始找小于当前arr[i]结尾数的最大上升序列长度
if (arr[j]<arr[i]){
dp[i]=Math.max(dp[i],dp[j]+1);
}
}
}
System.out.println(dp[n-1]);
}
}