GESP2025年9月认证C++四级( 第三部分编程题(2)最长连续段)
参考程序:
#include <bits/stdc++.h>
using namespace std;/*功能:给定 n 个整数(可能无序、可能有重复),先用 sort() 把它们从小到大排好,然后找出排序后最长的“相邻差为 1”的段的长度。
*/
int main() {int n;cin >> n; // 读入 n,若输入不完整则退出vector<long long> a(n);for (int i = 0; i < n; ++i) cin >> a[i];if (n == 0) { // 若没有数字,输出 0(这道题目会保证 n>=1,实际不会触发)cout << 0 << '\n';return 0;}sort(a.begin(), a.end()); // 关键一步:从小到大排序long long last = a[0]; // 初始化 记录上一个不同的数字int cnt = 1; // 当前连续段长度(至少 1)int ans = 1; // 最大连续段长度(至少 1)// 从第二个元素开始遍历for (int i = 1; i < n; ++i) {if (a[i] == last) {// 与上一个不同数字相同 —— 重复值,跳过continue;} else if (a[i] == last + 1) {// 刚好比上一个不同数字大 1 —— 连续,长度加 1++cnt;} else {// 差距不是 1,链断了,从当前数字重新开始计数cnt = 1;}last = a[i]; // 更新为新的“上一个不同数字”if (cnt > ans) ans = cnt;}cout << ans << '\n';return 0;
}