问题描述
给定一个长度为n的正整数序列a1,a2,⋯,an
请寻找最长的区间[l,r],满足al,al+1,⋯,ar中至多仅包含两种数字
输出满足条件的最长区间的长度
数据范围
1≤n≤105
1≤ai≤105
输入描述
输入有两行
第一行为整数n,表示序列长度
第二行为n个整数,用空格隔开
输出描述
输出满足条件的最长区间长度
示例
输入
11
3 3 3 1 2 1 1 2 3 3 4
输出
5
解释说明
上述示例中,满足条件的最长区间为1,2,1,1,2,长度为5
#include<iostream>
#define N 100010
using namespace std;
int main(){
int n=0;
cin>>n;
int s[n];
for(int i = 0;i<n;i++){
cin>>s[i];
}
if(n<=2){
cout<<n;
return 0;
}
int lp=0;
int rp=0;
int a[N]={0};
int maxLen=0;
int count=0;
while(rp <n){
if(a[s[rp]]==0)count++;
a[s[rp]]++;
while(count > 2){
a[s[lp]]--;
if(a[s[lp]] == 0)count--;
lp++;
}
maxLen = maxLen>rp-lp+1? maxLen:rp-lp+1;
rp++;
}
cout<<maxLen<<endl;
return 0;
}