luogu-B2097 最长平台
GESP C++三级练习,一维数组练习,难度★★☆☆☆。
luogu-B2097 最长平台
题目要求
题目描述
对于一个数组,其连续的相同段叫做一个平台,例如,在 ,,,,,,,,, 中 ,,,,, 都是平台。
编写一个程序,接收一个数组,找出最长的平台。在上面的例子中 就是最长的平台。
输入格式
第一行有一个整数 ,为数组元素的个数。()
第二行有 个整数,整数之间以一个空格分开,整数 范围()。
输出格式
输出最长平台的长度。
输入输出样例 #1
输入 #1
10
1 2 2 3 3 3 4 5 5 6
输出 #1
3
题目分析
解题思路
本题的解题思路如下:
问题本质:
- 找出数组中连续相同数字序列的最大长度
- 每个连续相同数字序列构成一个"平台"
解题关键:
- 遍历数组时,需要和前一个数字比较
- 用计数器记录当前平台长度
- 遇到不同数字时更新最大长度
实现思路:
- 使用三个变量:
- 当前平台计数器
- 最大平台长度
- 前一个数字
- 遍历时比较相邻数字:
- 相同则计数加1
- 不同则更新最大值并重置计数
- 使用三个变量:
复杂度分析:
- 时间复杂度:,仅需一次线性遍历
- 空间复杂度:,只使用了常数个变量,无需额外空间
{% include custom/custom-post-content-inner.html %}
示例代码
#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;
}
{% include custom/custom-post-content-footer.md %}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on