贪心思想,确实自己做还是没有思路,看了别人的代码后豁然开朗
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
int a[maxn],n,q,pos[maxn],ans;
set<int>s;
bool flag;
int main() {
scanf("%d",&q);
while(q--) {
flag=false;
ans=0x3f3f3f3f;
s.clear();
memset(pos,0,sizeof(pos));
scanf("%d",&n);
for(int i=0; i<n; i++) {
scanf("%d",&a[i]);
if(i==0) pos[a[i]]=i;
else if(pos[a[i]]==0&&a[0]!=a[i]) pos[a[i]]=i;
}
for(int i=0; i<n; i++) {
if(s.count(a[i])==1) {
flag=true;
ans=min(ans,i-pos[a[i]]+1);
pos[a[i]]=i;
}
s.insert(a[i]);
}
if(!flag) printf("-1\n");
else
printf("%d\n",ans);
}
return 0;
}