0%

最长增长子序列

最长增长子序列

给定一个数组arr,返回arr的最长增长子序列,例,arr = {7,1,9,3,8,19},最长增长子序列为 {1,3,8,19}。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   public static int[] generateLIS (int[] arr,int[] dp) {
int len = 0;
int index = 0;
for (int i = 0;i < dp.length;i ++) {
if (dp[i] > len) {
len = dp[i];
index = i;
}
}
int[] lis = new int[len];
lis[--len] = arr[index];
for (int i = index;i >= 0;i--) {
if (arr[i] < arr[index] && dp[i] == dp[index] - 1) {
lis[--len] = arr[i];
index = i;
}
}
return lis;
}
1
2
3
4
5
6
7
8
9
10
11
12
   public static int[] getdp1 (int[] arr) {
int[] dp = new int[arr.length];
for (int i = 0;i < arr.length;i++) {
dp[i] = 1;
for (int j = 0;j < i;j++) {
if (arr[i] > arr[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
return dp;
}