子序列(完美世界笔试题)
题目:
给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱) 例如:给定一个长度为8的数组A{1,3,5,2,4,6,7,8},则其最长的单调递增子序列为{1,2,4,6,7,8},长度为6。
输入描述:
第一行包含一个整数T,代表测试数据组数。
对于每组测试数据: N-数组的长度
a1 a2 … an (需要计算的数组)
保证: 1<=N<=3000,0<=ai<=MAX_INT.
输出描述:
对于每组数据,输出一个整数,代表最长递增子序列的长度。
输入例子:
2
7
89 256 78 1 46 78 8
5
6 4 8 2 17
输出例子:
3
3
java版本代码实现:
package cn.cat.test;
public class Test {
/** 子序列(完美世界笔试题)
* @Description:
* @author gwj
* @Created 2017年9月7日 下午3:31:34
* @param args
*/
public static void main(String[] args) {
int[] data = new int[]{1, 3, 5, 2, 4, 6, 7, 8};
int finalMaxSeq = 0;
for (int i = 0; i < data.length - 1; i++) {
int curNum = data[i];
int maxSeq = 1;
for (int j = i + 1; j < data.length; j++) {
if (curNum < data[j]) {
curNum = data[j];
maxSeq++;
}
}
if (maxSeq > finalMaxSeq) {
finalMaxSeq = maxSeq;
}
}
System.out.println("最大子系列长度为:" + finalMaxSeq);
}
}