最长连续不重复子序列

https://www.acwing.com/problem/content/801/

给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续子序列,输出它的长度。

输入格式

第一行包含整数n。

第二行包含n个整数(均在0~100000范围内),表示整数序列。

输出格式

共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。

数据范围

1n1000001≤n≤100000

输入样例:

5
1 2 2 3 5

输出样例:

3

思路:用i和j两个指针维护一个区间,j为左端点,i为右端点,S【】记录元素出现的次数。如果出现元素的次数大于1,表明出现重复,且必定为a[i]。此时就要重新维护一个以j=i为左端点的区间。从一到N扫描一遍就能得到结果。


#include <iostream>

using namespace std;
const int maxn = 1e5+10;
int a[maxn];
int s[maxn];
int main()
{
    std::ios::sync_with_stdio(false);
    int n;
    cin >> n;
    for(int i=1;i<=n;i++)
    {
        cin >> a[i];
    }
    int res=0;
    for(int i=1,j=1;i<=n;i++)
    {
        s[a[i]]++;
        while(s[a[i]]>1)
        {
            s[a[j]]--;
            j++;
        }
        res=max(res,i-j+1);
    }
    cout << res << endl;
    return 0;
}








原文地址:https://www.cnblogs.com/wjc2021/p/11161044.html