题目描述
输入长度为 nn 的一个正整数序列,要求输出序列中最长连号的长度。
连号指在序列中,从小到大的连续自然数。
输入格式
第一行,一个整数 n。
第二行,n 个整数 ai ,之间用空格隔开。
输出格式
一个数,最长连号的个数。
输入输出样例
输入 #1复制
10
1 5 6 2 3 4 5 6 8 9
输出 #1复制
5
说明/提示
数据规模与约定
对于100% 的数据,保证1≤n≤104 ,1≤ai ≤109 。
拿当前数字和上一个数字去比差如果是连号那就差一进行记录统计如果不是差一的那么就不是连续的记录最大连续数并重置计数,需要特殊考虑一下最长连号里最后一个数也包括的情况下需要特殊更新一下记录
AC代码(C++)
#includeusing namespace std; int main() { int n; cin >> n; //存放数列的上一个数字 int oldnum = -1; //存放数列的当前数字 int newnum = -1; //记录最大连续数列 int maxcount = -1; //因为单个数字也算是连续1所以得初始化1 int count = 1; for (int i = 0; i < n; i++) { cin >> newnum; //连续数列的当前数字比上一个数字要多1 if (newnum - 1 == oldnum) count++; else { //判断是否出现更大连续数 if (maxcount < count) maxcount = count; //重置统计器 count = 1; } //每个循环过后当前数字会变成上一个数字 oldnum = newnum; } //特殊情况处理,如果最后一个数字是包括最长连续数列的情况 //else语句结束时不会被执行,需要手动更新一下maxcount; //比如 10 1 2 3 7 1 2 3 4 5 6 的情况输出6才对 //如果不最后更新一下maxcount的话会输出3 //这道题在洛谷测试数据有些不严谨上述情况没考虑的代码也能AC不过考虑了才真正对 maxcount = max(count, maxcount); cout << maxcount << endl; return 0; }



