求连续递增子数组

题目描述:给定长度为N的数组A[0...N-1],求递增且连续数字最长的子数组。

eg:

1,2,3,34,56,57,58,59,60,61,99,122的连续数字最长的一段为56,57,58,59,60,61

算法分析:

遍历数组,从下表为1的开始,如果A[i]-A[i-1]==1,A[0....i-1]的连续子数组长度len加一,否则置最长连续子数组长度为1,

并每次更新最长连续的长度maxLen(比较len和maxLen的值)

代码

public static void main(String[] args) {
   int[] array = new int[12];
   array[0] = -1;
   array[1] = 2;
   array[2] = 3;
   array[3] = 34;
   array[4] = 56;
   array[5] = 57;
   array[6] = 58;
   array[7] = 59;
   array[8] = 60;
   array[9] = 61;
   array[10] = 99;
   array[11] = 121;
   maxSequence(array);
}

public static void maxSequence(int[] array){
    int form = 0;
    int to = 0;
    int len = 1;
    int maxLen = 1;
    int newForm = 0;
    for(int i=1; i<array.length;i++){
        if(array[i-1] + 1 == array[i]){
            len ++;
        }else{
            newForm = i;
            len = 1;
        }
        if(maxLen < len){
            maxLen = len;
            form = newForm;
            to = i;
        }
    }
    System.out.println("当前数组中最大连续子数组的长度为:"+maxLen);
    for(int k = form; k<=to ; k++){
        System.out.println(array[k]);
    }
}

猜你喜欢

转载自blog.csdn.net/junglerofchina/article/details/79466538