找出最小值和最大值之差小于k的并且最长的那一段,注意n=1的情况
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int arr[100000],a[100000];
int Max(int j){
sort(a,a+j);
return (a[j-1]-a[0]);
}//找出某一段的最大水深差
int main()
{
int n,k;
cin >> n >> k;
for(int i=0; i < n; i++)
cin >> arr[i];
int max=0;
for(int i=0; i < n; i++){//不能改成i<n-1,这样会令n=1的情况无解
int temp=1;
for(int j=i+1; j < n; j++){
int c=0;
for(int p=i; p <=j; p++)
a[c++]=arr[p];
if(Max(c)<=k){
temp++;
}
else break;
}
max=(temp>max)?temp:max;
}
cout << max << endl;
}