#include <iostream> #include <cstdio> #include <algorithm> #include <set> #include <map> using namespace std; typedef long long ll; const int INF = 0x3f3f3f3f; const int moder = 1e9 + 7; const int maxn = 1000000; int a[maxn]; int main() { int P; scanf("%d",&P); for(int i=0;i < P;i++) scanf("%d",&a[i]); set<int>st; for(int i=0;i < P;i++) st.insert(a[i]); int n = st.size(); int s=0,t=0,num=0; map<int,int>cnt; int res = P+1; for(;;) { while(t < P && num < n) { if(cnt[a[t]] == 0) { num++; } cnt[a[t]]++; t++; } if(num < n) break; res = min(res,t-s); if(--cnt[a[s++]] == 0) { num--; } } printf("%d\n",res); return 0; } /*5 1 8 8 8 1 */
map很好用,记住。