zoukankan      html  css  js  c++  java
  • 最长连续不重复子序列

    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;
    }








  • 相关阅读:
    MFC
    AC自动机
    KMP
    Power Transmission (Hard Edition)
    Floyd
    地杰斯特算法
    二叉树
    51nod 1002 数塔取数问题【dp】
    51nod1049 最大子段和【动态规划】
    poj2385
  • 原文地址:https://www.cnblogs.com/wjc2021/p/11161044.html
Copyright © 2011-2022 走看看