4 条题解
-
1
算法思路:
- 定义两个变量
maxLength
和currentLength
,分别用于记录最长平台的长度和当前正在计算的平台的长度。 - 从数组的第二个元素开始遍历,比较当前元素与前一个元素是否相同。
- 如果相同,则将当前长度加1。
- 如果不相同,则将当前长度与最大长度比较,并重置当前长度为1。
- 在每次更新最大长度时,取最大值作为新的最大长度。
- 最后返回最大长度作为结果。
代码解析:
std::vector<int>& arr
:函数findLongestPlateau
接收一个引用类型的整数向量作为参数,表示要查找最长平台的数组。maxLength
、currentLength
:定义两个变量来保存最长平台的长度和当前正在计算的平台的长度。for
循环从数组的第二个元素开始遍历,通过比较当前元素与前一个元素是否相同来判断是否属于同一平台。- 如果相同,说明平台延续,将当前长度加1。
- 如果不相同,说明当前平台结束,将当前长度与最大长度比较,并以较大值更新最大长度。然后重置当前长度为1,为下一个平台做准备。
- 循环结束后,返回最大长度作为结果。
- 在
main
函数中,首先读取输入的整数n表示数组元素的个数,然后用一个循环读取n个整数作为数组的值。 - 调用
findLongestPlateau
函数计算最长平台的长度,并将结果打印输出。
#include <iostream> #include <vector> int findLongestPlateau(std::vector<int>& arr) { int maxLength = 0; int currentLength = 1; for (int i = 1; i < arr.size(); i++) { if (arr[i] == arr[i-1]) { currentLength++; } else { maxLength = std::max(maxLength, currentLength); currentLength = 1; } } return std::max(maxLength, currentLength); } int main() { int n; std::cin >> n; std::vector<int> arr(n); for (int i = 0; i < n; i++) { std::cin >> arr[i]; } int longestPlateau = findLongestPlateau(arr); std::cout << longestPlateau << std::endl; return 0; }
- 定义两个变量
- 1
信息
- ID
- 200
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 153
- 已通过
- 71
- 上传者