分析性质:连续两个数字绝对值小于等于1,并且序列中最大最小值差为1,那么也就是这个序列只有两个连续的数字,只存在两种数字,这两个数字差为1。
利用双指针,j记录j到i的合法区间,每次判断区间内数字种类个数是否大于2,如果大于2那么cnt[j]–,知道将区间元素种类个数控制在2以内。
#include <bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f
using namespace std;
typedef pair<int,string> PII;
const int N=1e5+10;
int n,m,ans;
int cnt[N],w[N];
int main() {
cin>>n;
for(int i=0;i<n;i++)cin>>w[i];
for(int i=0,j=0,s=0;i<n;i++){
if(!cnt[w[i]])s++; //s记录元素中存在几个不同的数字
cnt[w[i]]++;//w[i]个数
while(s>2){//[j,i]这段序列不合法了
cnt[w[j]]--;
if(!cnt[w[j]])s--;//如果彻底消灭w[j]则s-=1
j++;
}
ans=max(ans,i-j+1);
}
cout<<ans;
return 0;
}