0
点赞
收藏
分享

微信扫一扫

7-2 最长连续递增子序列 (20 分)(C语言版)

眼君 2022-02-10 阅读 85

给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。

输入格式:
输入第1行给出正整数n(≤10^5);第2行给出n个整数,其间以空格分隔。

输出格式:
在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。

输入样例:

15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10

输出样例:

3 4 6 8
#include <stdio.h>
int main()
{
    int n;
    scanf("%d\n",&n);
    int A[n];
    int B[n];//注意:存储每个位置开始的最长连续递增子序列
    int i=0,j;
    int x=0,y=-1;//注意:x是长度,y是x的对应下标
    for(i=0;i<n;i++){
        scanf("%d ",&A[i]);
        B[i] = 1;//将每个位置开始的最长连续递增子序列数目设置为1(因为其本身算一个)
    }
    
    
    for(i=0;i<n-1;i++){
        for(j=i+1;j<n;j++){
            if(A[j]>A[j-1]){
                B[i]++;//计算A数组每个从i开始的最长连续子序列数目
            }else{
                break;
            }
        }
    }
    for(i=0;i<n;i++){
        if(B[i]>x){//找出最长的长度x和其下标y
            x = B[i];
            y = i;
        }
    }
    
    
    for(i=y;i<y+x;i++){
        if(i==y){
            printf("%d",A[i]);
        }else{
            printf(" %d",A[i]);
        }
    }
    
    /*另外一种输出方法
    printf("%d",A[y]);
    for(i=y+1;i<y+x;i++){
        printf(" %d",A[i]);
    }*/
    return 0;
    
}
举报

相关推荐

0 条评论