最长有序子序列

来源:互联网 发布:网络教师招聘 编辑:程序博客网 时间:2024/06/06 19:13

什么是最长有序子序列呢?

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

比如有如下数组:

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);    }}






0 0
原创粉丝点击