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

AcWing

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

a[N]: 原数组;

s[N]: 原数组中每个值出现的次数。

每次右移尾指针后,右移左指针,使右指针指向的元素值最多出现1次。

#include <iostream>
using namespace std;

int n;
const int N = 100010;
int a[N], s[N];
int l = 0, r = -1;
int res = 0;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    
    cin >> n;
    for(int i = 0; i <= n - 1; i ++) cin >> a[i];
    
    while(r <= n - 2){
        s[a[++ r]] ++;
        while(s[a[r]] >= 2) s[a[l ++]] --;
        if(r - l + 1 > res) res = r - l + 1;
    }
    
    cout << res;
    return 0;
}