AcWing799 最长连续不重复子序列

题目描述

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

输入格式

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

输出格式

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

数据范围

\(1<=n<=100000\)

输入样例

5
1 2 2 3 5

输出样例

3

思路:双指针法,快指针j具有一个单调性,即它只能向右走不能返回,在检查一个区间是否有重复元素时,用数组s[]记录每个数值出现的次数。结合样例和代码体会吧。

代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100003;
int a[maxn];
int s[maxn];
int main(){
    int n; cin >> n;
    int res = -1;
    for(int i = 0; i < n; ++i) cin >> a[i];
    for(int i = 0, j = 0; i < n; ++i){
        s[a[i]]++;
        while(s[a[i]] > 1){
            s[a[j]]--;
            j++;
        }
        res = max(res, i-j+1);
    }
    cout << res;
    return 0;
}
posted @ 2019-10-06 20:59  patrolli  阅读(230)  评论(0编辑  收藏  举报