您的位置:首页 > 其它

最长有序子序列

2015-12-13 22:28 239 查看
什么是最长有序子序列呢?

首先要明白子序列和子串不同,可以不连续,然后保证有序就是有序子序列了。



比如有如下数组:

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

其中F[I]存的是以NUM[I]结尾的子序列的最长长度。
上面看懂了,求一个数组的最长有序子序列就容易了,代码如下:

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: