最长连续不重复子序列(双指针算法)
Posted 行码棋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长连续不重复子序列(双指针算法)相关的知识,希望对你有一定的参考价值。
样例:
5
1 2 3 4 2
输出:
4
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n;
int vis[N],a[N];
int main()
{
cin>>n;
int ans = 0;
for(int i=1,j=1;i<=n;i++)
{
cin>>a[i];
vis[a[i]] ++;
while(vis[a[i]] > 1)
{
vis[a[j]] --;
j ++;
}
ans = max(ans,i-j+1);
}
cout<<ans<<'\\n';
return 0;
}
用一个vis数组记录数出现的次数,i指针在右边,j指针表示从j到i的区间为连续的不重复子序列。
当下一个i对应的值出现的次数大于1时,只要这个对应的次数不等于1,j就一直往后移动。
以上是关于最长连续不重复子序列(双指针算法)的主要内容,如果未能解决你的问题,请参考以下文章