三级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++三级练习 luogu-B2097 最长平台
📅 2025-06-08·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#一维数组
GESP C++三级练习,一维数组练习,难度★★☆☆☆。
luogu-B2097 最长平台
题目要求
题目描述
对于一个数组,其连续的相同段叫做一个平台,例如,在 ,,,,,,,,, 中 ,,,,, 都是平台。
编写一个程序,接收一个数组,找出最长的平台。在上面的例子中 就是最长的平台。
输入格式
第一行有一个整数 ,为数组元素的个数。()
第二行有 个整数,整数之间以一个空格分开,整数 范围()。
输出格式
输出最长平台的长度。
输入输出样例 #1
输入 #1
PLAINTEXT
10
1 2 2 3 3 3 4 5 5 6
输出 #1
PLAINTEXT
3
题目分析
解题思路
本题的解题思路如下:
-
问题本质:
- 找出数组中连续相同数字序列的最大长度
- 每个连续相同数字序列构成一个"平台"
-
解题关键:
- 遍历数组时,需要和前一个数字比较
- 用计数器记录当前平台长度
- 遇到不同数字时更新最大长度
-
实现思路:
- 使用三个变量:
- 当前平台计数器
- 最大平台长度
- 前一个数字
- 遍历时比较相邻数字:
- 相同则计数加1
- 不同则更新最大值并重置计数
- 使用三个变量:
-
复杂度分析:
- 时间复杂度:,仅需一次线性遍历
- 空间复杂度:,只使用了常数个变量,无需额外空间
示例代码
CPP
#include<iostream>
#include<cmath>
int main() {
// 读取数组长度
int n;
std::cin >> n;
// count用于记录当前平台长度
int count = 0;
// max_n用于记录最长平台长度
int max_n = 0;
// last_num用于记录上一个数字,初始值-1表示还未读取任何数字
int last_num = -1;
// 循环读取n个数字
while (n--) {
// 读取当前数字
int cur_num;
std::cin >> cur_num;
// 如果是第一个数字
if (last_num == -1) {
last_num = cur_num;
count++;
continue;
}
// 如果当前数字与上一个数字相同,平台长度加1
if (cur_num == last_num) {
count++;
} else {
// 如果不同,更新最长平台长度
max_n = std::max(max_n, count);
// 重置last_num和count,开始新的平台计数
last_num = cur_num;
count = 1;
}
}
// 输出最长平台长度
std::cout << max_n;
return 0;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B2064, 斐波那契数列
斐波那契数列本身可能并不一定涉及数组知识点,但本题中要求的输入、输出格式涉及到三级知识点一维数组的使用。 题目本身对小学生来说,也是有一定难度的。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B3661, [语言月赛202209] 排排队
三级知识点一维数组练习,除了应用了数组以外,其余逻辑比较简单,适合初学者。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 3 分钟
【GESP】C++三级练习 luogu-B2087, 与指定数字相同的数的个数
GESP三级知识点一维数组练习,题目本身逻辑不复杂。
阅读全文 →
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
💬 读者留言与交流
还没有留言,快来成为第一个讨论者吧!