这题要求是要在一个数组中找出最长的相差小于n的子数组,不能有重复元素。
看了一会这题,然后我关闭了我的电脑。果然看别人的代码很好。
#include<bits/stdc++.h>
using namespace std;
int a[200020];
int main()
{
int t,n;
cin>>t;
while(t--){
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
set<int>s;
queue<int>q;
sort(a,a+n);
int res=0;
for(int i=0;i<n;i++){
s.insert(a[i]);
q.push(a[i]);
while((*s.rbegin()-*s.begin())>=n){
if(s.count(q.front()))
s.erase(q.front());
q.pop();
}
res=max(res,(int)s.size());
}
cout<<res<<'\n';
}
return 0;
}
本来感觉看别人的代码看不懂想搜视频的,结果b站还没有视频,找到了这个代码,这个写得相对好理解。很不容易的一次17点开始的比赛,可惜我的实力还是这么弱。感觉再来一次,我大概也不知道这样写。我还是相信自己的,我只会越来越强。