问题描述:
有一个字符组arr = {2,5,3,4,1,7,6},求其最大上升子序列长度。
解题思路:
1、给一个对应长度的上升子序列长度记录数组sqeLen;初始化其全部值为1;
2、对于第i个数据,j<i。如果arr[j]<arr[i]且sqeLen[j]+1>sqeLen[i];则更新sqeLen[i]为sqeLen[j]+1;
3、遍历sqeLen,找出最大长度的sqe。
代码实现:
package ali.example;
public class LIS {
//求数组arr的最大上升子序列长度
public static int LongestLength(int[] arr) {
int N = arr.length;
int[] seqLen = new int[N];
//seqLen每个字符前的最大上升子序列长度,初始化为1
for(int i = 0;i< N; i++)
seqLen[i] = 1;
for(int i = 1;i< N; i++) {
for(int j = 0;j < i; j++) {
if(arr[j] < arr[i] && seqLen[j]+1 >seqLen[i])
seqLen[i] = seqLen[j] + 1;
}
}
int maxlen = 0;
int index = 0;
for(int i = 1;i< N; i++) {
if(seqLen[i]>maxlen) {
maxlen = seqLen[i];
index = i;
}
}
System.out.println(index);
System.out.println(maxlen);
return maxlen;
}
public static void main(String[] args) {
int[] arr = {2,5,3,4,1,7,6};
System.out.println(LongestLength(arr));
}
}