尺取法
#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; }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~