题目:


代码:
#include<iostream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int>a(n);
for(int i=0;i<n;i++)cin>>a[i];
int zu_final=0;
int zu_now=1;
sort(a.begin(),a.end());
for(int i=1;i<a.size();i++)
{
if(a[i]-a[i-1]==0)
{
int k=a[i];
a.erase(a.begin()+i);
a.push_back(k);
i--;
//for(int i=0;i<n;i++)cout<<a[i]<<' ';cout<<endl;
}
else if(a[i]-a[i-1]==1)
{
zu_now++;
}
else
{
if(zu_final==0)zu_final=zu_now;
if(zu_final!=0)zu_final=zu_final<zu_now?zu_final:zu_now;
zu_now=1;
}
}
if(zu_final==0)zu_final=zu_now;
if(zu_final!=0)zu_final=zu_final<zu_now?zu_final:zu_now;
//for(int i=0;i<n;i++)cout<<a[i]<<' ';
cout<<zu_final;
return 0;
}
思路:
先排序 -> 这样才能是连续的
重复的移动到最后面 -> 因为题目要求组不能重复实力
从头的遍历,值与前一个一样,就放到最后;值比前面大一,连续的计数++;其他的那么就是不连续的,重新计数,并比较大小更新数值。
结果:

我也不知道为么会错误
试验:




我自己试了一些例子,都是正确的呀,希望能够得到大家的帮助,谢谢大家!