尺取法

 

 

 

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
using namespace std;
int a[1000005];

int main(void)
{
    set<int> s;
    map<int, int> mp;
    int p; cin >> p;
    for (int i = 0; i < p; i++)
    {
        cin >> a[i];
        s.insert(a[i]);
    }
    int P = s.size(),num = 0;
    int star = 0, en = 0,res = 999999;
    while (true)
    {
        while (en < p && num < P)
        {
            if (mp[a[en++]]++ == 0) num++;
        }
        if (num < P) break;
        res = min(res, en - star);
        if (--mp[a[star++]] == 0) num--;
    }
    printf("%d", res);
    return 0;
}

 

posted @ 2021-03-14 16:04  loliconsk  阅读(72)  评论(0)    收藏  举报