最长连续不重复子序列

题目大意:给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。

数据范围
1≤n≤100000
输入样例:
5
1 2 2 3 5
输出样例:
3

解题思路:用到了一个标记数组s[i],记录下每个元素出现的次数,后指针从第一位开始往后移动,遇到重复出现的前指针就开始向后移动直到消除重复,遍历完整个序列即可。

Code:

#include<iostream>

using namespace std;
const int maxn=1e5+7;

int a[maxn],s[maxn];

int main(){
    int n,ans;
    scanf("%d",&n);
    
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    
    for(int i=1,j=1;i<=n;i++){
        s[a[i]]++;
        while(s[a[i]]>1){
            s[a[j]]--;
            j++;
        }
        ans=max(ans,i-j+1);
    }
    
    printf("%d\n",ans);
}

版权声明:本文为weixin_43872264原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43872264/article/details/108256106