说一下思路,从一个高峰值点开始的所有峰值点(高峰和低峰)记录为1,其他点为0
然后 新生成一个数组记录每个1所在的小标,然后去求每5个1之间的距离即可, 然后取最大值
代码如下:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin>>n;
vector<int>nums(n);
//用来保存每个点是否是峰值点
vector<int>temps(n,0);
for(int i=0;i<n;i++){
cin>>nums[i];
}
//判断第一个点是不是高峰值点
if(nums[0]>nums[1]) temps[0]=1;
else temps[0]=0;
//最后一个值肯定是一个峰值点
temps[n-1]=1;
//判断每个点是否是峰值点
for(int i=1;i<n-1;i++){
if(nums[i]>nums[i-1]&&nums[i]>nums[i+1]) temps[i]=1;
if(nums[i]<nums[i-1]&&nums[i]<nums[i+1]) temps[i]=1;
}
//存储每个峰值点的下标
vector<int>cunchu;
for(int i=0;i<n;i++){
if(temps[i]==1) cunchu.push_back(i);
}
//如果峰值的数目小于5个,垮掉
if(cunchu.size()<5){
cout<<0<<endl;
return 0;
}
int res=0;
//取每5个峰值点的最大值
for(int i=4;i<cunchu.size();i++){
res=max(res,cunchu[i]-cunchu[i-4]+1);
}
cout<<res<<endl;
return 0;
}