记录每个数字出现次数,如果又多次出现就从当前位置重新开始计算长度
#include <iostream>
using namespace std;
const int N = 100010;
int n;
int q[N],s[N];
int main()
{
scanf("%d",&n);
for (int i=0;i<n;i++) scanf("%d",&q[i]);//似乎是非降序排列
int res = 0;
for (int i=0,j=0;i<n;i++)
{
s[q[i]]++;//给数组记录出现次数
while (j<i && s[q[i]]>1) s[q[j++]]-- ;//当出现次数大于一就不是不重复的,
//就一直从左指针开始减,直到当前位置减到一,从当前位置重新开始,
res = max(res,i-j+1);
}
cout<<res<<endl;
return 0;
}
标签:int,res,位置,重复子,799,当前,序列
From: https://www.cnblogs.com/echoT/p/16629634.html