思路:
1.寻找两个距离最短的相同的值,距离+1
即是答案,数组长为1
或者没找到相同值就输出-1
;
2.既然距离最短了,说明它们两个之间不会有相同值了(最开始两分钟居然没想到这点QAQ)
代码:
#define IOS ios::sync_with_stdio(false);cin.tie(0)
#include<bits/stdc++.h>
using namespace std;
#define mem(a,x) memset(a,x,sizeof(a))
#define rp(i,n) for(int i=0;i<n;i++)
#define rpn(i,n) for(int i=1;i<=n;i++)
const int MAX_N=200005;
int arr[MAX_N];
int main(){
IOS;
int t;
cin>>t;
rp(i,t){
int n,mind=MAX_N;
cin>>n;
mem(arr,-1);
rp(j,n){
int a;
cin>>a;
if(n!=1){
if(~arr[a]) mind=min(mind,j-arr[a]);
arr[a]=j;
}
}
if(mind==MAX_N) cout<<"-1
";
else cout<<mind+1<<'
';
}
return 0;
}