题目描述
给定一个整数数列 a1,a2,…,an,请找出最长平台。所谓平台,就是指数列中一段连续的、完全相等的数字,单个数字也可以成为一个平台。最长平台可能不止一个,在找到最长平台的同时,输出最长平台的数量。
输入格式
第一行:单个整数 n
第二行:a1,a2,…,an
输出格式
两个整数:表示最长平台的长度与最长平台的数量
数据范围
- 对于 50%50% 的数据,n≤1000
- 对于 100%100% 的数据,n≤500,000
- 1≤ai≤1,000,000
样例数据
输入:
7
2 2 2 1 3 3 3
输出:
3 2
说明:
最长平台为2 2 2或3 3 3
输入:
5
3 1 4 1 5
输出:
1 5
说明:
每个数字单独成一个平台
题解
本题关键点:数组需要多循环一次,保证最后一个数字的最长平台数量更新;还要判断跟原来最长平台一样长则sum+1 。
代码如下。
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int a[n];
int maxlen = 0; //初始化最长平台长度
int sum = 0; //初始化最长平台个数
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int len = 0;
for(int i = 1; i <= n + 1; i++) {
//如果跟上一个数字相同
if (a[i] == a[i - 1]) {
len++;
} else {
if(len > maxlen) {
maxlen = len;
sum = 1;/
} else if(len == maxlen) {
sum++;
}
len = 1;
}
}
cout << maxlen << " " << sum<<endl;
return 0;
}