问题描述:
题解:
public class Practice_最长上升子序列问题 {
public static void main(String[] args) {
int[] arr = {4, 3, 2, 5, 6};
int[] dp = new int[arr.length];
System.out.println(dp1(arr, dp));
System.out.println(f(arr));
}
//dp[i]表示以i为下标结尾的最大递增序列长度
private static int dp1(int[] arr, int[] dp) {
dp[0] = 1;
int cnt = 0;
for (int i = 1; i < arr.length; i++) {
cnt = 0;
for (int j = i; j >= 0; j--) {
if (arr[i] > arr[j]) {
cnt = Math.max(cnt, dp[j] + 1);
}
}
dp[i] = cnt;
}
int ans = -1;
for (int i = 0; i < dp.length; i++) {
ans = Math.max(ans, dp[i]);
}
return ans;
}
//暴力法
private static int f(int[] arr) {
int cnt = 1;
int maxCnt = 0;
for (int i = 0; i < arr.length; i++) {
int p = i;
cnt = 1;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] > arr[p]) {
p = j;
cnt++;
}
}
if (cnt > maxCnt) {
maxCnt = cnt;
}
}
return maxCnt;
}
}