关键步骤在如何理解s[a[i]],s数组计数,例如s【6】=2 代表a【i】=6出现了两次
include [HTML_REMOVED]
using namespace std ;
const int N = 100010 ;
int a[N],s[N] ;
int main ()
{
int n ;
cin >> n ;
for (int i = 1 ; i <= n ; i ++ ) cin >> a[i] ;
int res = 1 ;
for (int i = 1 ,j = 1 ; i <= n ; i ++ )
{
s[a[i]] ++ ; //s数组计数,eg.s6=2 代表a=6出现了两次 ;
while(s[a[i]] > 1 )
{
s[a[j]] -- ;
j ++ ; //循环直至j到i前面一格,才会减去重复元素使得a[i]=1 ;且前面的全部自动清零
}
res = max(res , i - j + 1 ) ; //从i = 1 开始记录,因此实时记录最长的
}
cout << res << endl ;
return 0 ;
}