// 尺取法:指对数组保存一对下标(起点,终点),然后根据实际情况交替推进两个端点知道得出答案的方法。
#include<iostream>
#include<cstdio>
#include<set>
#include<map>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max_n=1e6+10;
int n;
int a[Max_n];
set<int>st;
map<int,int>mp;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
st.insert(a[i]);
}
int l=0,k=0,num=st.size(),ans=n;
for(int r=0;r<n;r++){
mp[a[r]]++;
if(mp[a[r]]==1)k++;
while(mp[a[l]]>1)mp[a[l++]]--;
if(k==num)ans=min(ans,r-l+1);
}
printf("%d\n",ans);
return 0;
}
07-20
07-20
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交