题解:
我们可以先把他按照能力值水平由小到大进行排序,在进行双指针操作,我们每次都让右指针每次都移动,如果相差大于5的话我们就把左指针往右移动一下,并且如果(右指针指针指向的数-左指针指向的数)小于5的话,我们需要更新一下之间的差值。
/*Keep on going Never give up*/ #pragma GCC optimize(3,"Ofast","inline") #include <bits/stdc++.h> const int maxn = 2e5+10; const int MaxN = 0x3f3f3f3f; const int MinN = 0xc0c0c00c; typedef long long ll; const int mod = 100000000; using namespace std; int a[maxn]; int main() { int n; cin>>n; for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); int ans=0,l=0; for(int i=0;i<n;i++){ if(a[i]-a[l]<=5){ ans=max(ans,i-l+1); } else l++; } cout<<ans<<endl; return 0; }