什么是最长有序子序列呢?
首先要明白子序列和子串不同,可以不连续,然后保证有序就是有序子序列了。
比如有如下数组:
I |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Num[I] |
1 |
4 |
7 |
2 |
5 |
8 |
3 |
6 |
9 |
F[I] |
1 |
2 |
3 |
2 |
3 |
4 |
3 |
4 |
5 |
上面看懂了,求一个数组的最长有序子序列就容易了,代码如下:
public class Test {
public static void main(String[] args) {
int[] num = new int[]{1,4,7,2,5,8,3,6,9};
int[] f = new int[num.length];
for (int i = 0;i < num.length;i++) {
f[i] = 1;
}
int max = f[0];
for (int i = 1;i < num.length;i++) {
for (int j = 0;j < i;j++) {
//更新条件,1是有序,2是长度能变长
if (num[i] >= num[j] && f[i] < f[j] + 1) {
f[i] = f[j] + 1;
if (f[i] > max) {
max = f[i];//更新最长的长度
}
}
}
}
System.out.println(max);
}
}