从n个数中找出一个字串,使得这个字串只有1个重复元素且重复次数为二,输出最短长度
#pragma GCC optimize(2)
#include <bits/stdc++.h>
#define rush() int T;cin>>T;while(T--)
#define go(a) while(cin>>a)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
#define debug(a) cout<<"*"<<a<<"*"<<endl
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> Pair;
const int inf=0x3f3f3f3f;
const int N=2e5+5;
int n,m,t;
int i,j,k;
int a[N];
map<int,int>mp;//记录上一次 a[i] 出现的位置
int main()
{
IOS; string s;
rush(){
int ans=inf;
cin>>n; mp.clear();
for(i=0;i<n;i++){
cin>>a[i];
}
if(n==1){cout<<-1<<endl; continue;}
for(i=0;i<n;i++){
if(!mp.count(a[i]))
mp[a[i]]=i;
else {
ans=min(ans,i-mp[a[i]]+1);
mp[a[i]]=i;
}
}
if(ans==inf) cout<<-1<<endl;
else cout<<ans<<endl;
}
return 0;
}