【快慢指针】 最长连续不重复子序列
传送门
题意
给定长度为\(n\)的序列\(a\),求连续的没有重复元素的最长子序列的长度
数据范围
\(1\leq n\leq 100000\)
\(1 \leq a_{i} \leq 100000\)
题解
双指针,保证\(j<i\) ,用一个数组记录当前值的出现个数,
因为是连续的,当 \(a[ i ]\)出现两次的时候,\(j\)一直向前,并且映射的次数减1,直到 \(i\)对应的值的出现次数为1时候,取最大记录即可
Code
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
const int N=1e5+10;
int a[N],f[N];
int n;
int main(){
scanf("%d",&n);
rep(i,0,n) scanf("%d",&a[i]);
int ans=-1;
for(int i=0,j=0;j<n;j++){
f[a[j]]++;
while(i<j && f[a[j]] >1)
f[a[i++]]--;
ans=max(ans,j-i+1);
}
printf("%d\n",ans);
}

浙公网安备 33010602011771号