信奥赛CSP-J复赛集训(模拟算法专题)(11):P1420 最长连号

信奥赛CSP-J复赛集训(模拟算法专题)(11):P1420 最长连号

信奥赛CSP-J复赛集训(模拟算法专题)(11):P1420 最长连号_第1张图片

题目描述

输入长度为 n n n 的一个正整数序列,要求输出序列中最长连号的长度。

连号指在序列中,从小到大的连续自然数。

输入格式

第一行,一个整数 n n n

第二行, n n n 个整数 a i a_i ai,之间用空格隔开。

输出格式

一个数,最长连号的个数。

输入输出样例 #1

输入 #1

10
1 5 6 2 3 4 5 6 8 9

输出 #1

5

说明/提示

数据规模与约定

对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 1 0 4 1 \leq n \leq 10^4 1n104 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1ai109

AC代码:

#include  // 包含常用头文件,简化代码
using namespace std;

int n, a[10010],        // n:数字个数;a[]:存储输入的数字序列
    len = 1,            // 当前连续递增序列的长度,初始为1(单元素)
    maxlen = 1;          // 记录最长连续递增序列的长度,初始为1

int main() {
    cin >> n;            // 输入数字个数
    for (int i = 1; i <= n; i++) {  // 循环读入数字到数组a[1..n]
        cin >> a[i];
    }

    // 遍历数组,寻找最长连续递增序列
    for (int i = 1; i <= n - 1; i++) {  // 比较a[i]与a[i+1],故i到n-1
        if (a[i] == a[i + 1] - 1) {     // 判断是否满足连续递增(差值为1)
            len++;                       // 当前序列长度加1
            maxlen = max(maxlen, len);    // 更新最大长度(打擂台)
        } else {                         // 若序列中断
            len = 1;                     // 重置当前长度为1(从下一元素重新计数)
        }
    }

    cout << maxlen;       // 输出最长连续递增序列的长度
    return 0;
}

功能分析

  1. 问题目标
    计算给定整数序列中最长连续递增子序列的长度,其中递增定义为相邻元素差值为1(如3,4,5)。

  2. 变量说明

    • n:输入的整数个数。
    • a[]:存储输入的整数序列,索引从1开始。
    • len:当前连续递增序列的长度,初始为1(单个元素自身构成长度为1的序列)。
    • maxlen:记录遍历过程中发现的最长连续递增序列长度。
  3. 核心逻辑

    • 输入处理:读取数字并存入数组。
    • 遍历比较:从第一个元素开始,逐个比较相邻元素是否满足a[i] + 1 == a[i+1]
      • 满足条件:当前长度len增加,并更新maxlen
      • 不满足条件:重置len为1,从下一元素开始重新统计。
    • 边界处理:循环终止条件为i <= n-1,确保a[i+1]不越界。
  4. 关键点

    • 初始化lenmaxlen初始为1,正确处理单元素序列。
    • 实时更新:每次发现更长的序列时立即更新maxlen,避免遗漏。
    • 重置逻辑:当序列中断时,len重置为1而非0,因为新起点自身构成长度为1的序列。
  5. 复杂度

    • 时间复杂度:O(n),仅需一次遍历。
    • 空间复杂度:O(n),用于存储输入序列。

示例说明

  • 输入7↵3 4 5 1 2 3 4
  • 处理过程
    • 前3个元素3,4,5形成长度3的序列。
    • 元素5与1不连续,len重置为1。
    • 后续元素1,2,3,4形成长度4的序列,最终maxlen更新为4。
  • 输出4

文末彩蛋:

点击查看老师的个人主页,学习csp信奥赛完整系列课程:
https://edu.csdn.net/lecturer/7901

在这里插入图片描述

你可能感兴趣的:(算法,csp,信奥赛,c++,数据结构,模拟算法,gesp)