最长连续不重复子序列(双指针算法)

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就一直往后移动。

以上是关于最长连续不重复子序列(双指针算法)的主要内容,如果未能解决你的问题,请参考以下文章

15.最长连续不重复子序列

ACWing 最长连续不重复子序列(双指针)

双指针—最长连续不重复子序列

最长连续不重复子序列

双指针

最长连续不重复子序列