例:(1,9,2,5,7,3,4,6,8,0) 最长子序列为(3,4,6,8)
(1,9,2,5,7,7,8,6,8,0)最长子序列为(2,5,7)
public static void main(String[] args) {
int arr[] = new int[]{1,9,2,5,7,3,4,6,8,0};
maxArr(arr);
}
private static void maxArr(int[] arr){
int[] helper = new int[10];//开辟长度为10的辅助空间
int p = 0;// 定义p 用于定位
int q = 0;// 定义q 用于移动
while (p <= q && q < arr.length - 1) {
if (arr[q] < arr[q + 1]) { // 若后一位比前一位大
q++; // q接着往后移动
} else { // 若后一位比前一位小 停止移动
helper[p] = q - p + 1; //以p作为数组下标存放各递增序列长度
p++;
q = p; //从新的起点开始
}
}
//开始找最长的
int maxl = 0;
for (int i = 0; i < helper.length - 1; i++) { //进行遍历
maxl = Math.max(maxl, helper[i]); // 层层比较 获取最长的子序列数
}
//找到了maxl 开始遍历输出
for (int i = 0; i < helper.length - 1; i++) { //遍历helper辅助数组
if (helper[i] == maxl) { //确定长度最长的子序列
while (maxl > 0) { //按 maxl的长度输出序列数个数
System.out.print(arr[i]+" "); //输出最长序列数
i++; //找最长子序列的长度
maxl--;
}
}
}