题目:
给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,{1,9,2,5,7,3,4,6,8,0} 中最长的递增子序列为 {3,4,6,8} 。
分析:
下面是我以前在网上搜的一种写法,挺好理解的。令递增子序列长度 k 为1,如果是递增的,就让k++,反之说明不再是递增的,就让k回到初始的1,为了记住这一段递增序列的长度和开头位置,引入了maxLen 和 begin ,用 maxLen 保存该长度,用 begin 保存开头位置,如果下一个递增子序列的长度>maxLen,更新 maxLen 和 begin,然后继续下一子序列,直到结束。
代码实现:
public class _17找出最长连续递增子序列_部分有序 {
public static void getMaxLen(int[] arr) {
int k = 1;
int maxLen = 1;
int begin = 0;
for (int end = 1; end < arr.length; end++) {
if(arr[end-1]<=arr[end]){
k++;
} else {
k=1;
}
if (k>=maxLen) {
maxLen = k;
begin = end-maxLen+1;
}
}
for(int i = begin;i<begin+maxLen;i++) {
System.out.print(arr[i] + " ");
}
}
public static void main(String[] args) {
int []arr = {1,9,2,5,7,3,4,6,8,0};
getMaxLen(arr);
}
}