【PTA数据结构 | C语言版】最长连续递增子序列

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

    • 题目
    • 代码

题目

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

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

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

输入样例:
15
1 9 2 5 7 3 4 6 8 0 11 15 17 17 10

输出样例:
3 4 6 8

代码

#include 

#define MAX_N 100000

int main() {
    int n, arr[MAX_N];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    // 记录最长递增子序列的长度和起始位置
    int max_len = 1, start = 0;
    // 记录当前递增子序列的长度和起始位置
    int current_len = 1, current_start = 0;

    // 一次遍历数组寻找最长递增子序列
    for (int i = 1; i < n; i++) {
        if (arr[i] > arr[i-1]) {
            // 当前元素延续递增趋势,增长当前子序列
            current_len++;
        } else {
            // 递增中断,检查当前子序列是否为最长
            if (current_len > max_len) {
                max_len = current_len;
                start = current_start;
            }
            // 重置当前子序列信息
            current_len = 1;
            current_start = i;
        }
    }

    // 检查最后一个子序列(处理末尾连续递增的情况)
    if (current_len > max_len) {
        max_len = current_len;
        start = current_start;
    }

    // 输出最长递增子序列,确保行末无多余空格
    for (int i = 0; i < max_len; i++) {
        printf("%d", arr[start + i]);
        if (i < max_len - 1) {
            printf(" ");
        }
    }
    printf("\n");

    return 0;
}    

你可能感兴趣的:(PTA,数据结构题目集,数据结构,c语言,算法)