题意就是找到一个最小的子区间使得这个区间中只有一个数的个数为2.
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<queue>
#include<map>
#include<set>
#include<iomanip>
#include<math.h>
using namespace std;
typedef long long ll;
typedef double ld;
const int INF = 0x3f3f3f3f;
int i,j,k;
int ans,res,cnt,temp;
int n,m;
const int N = 2e5 + 10;
int a[N];
set<int>s;
int pos[N];
int main()
{
int t;
cin>>t;
while(t--)
{
s.clear();
memset(pos,0,sizeof pos );
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
ans=INF;
for(i=1;i<=n;i++)
{
if(s.count(a[i])==1)///已经出现过一次
{
ans=min(ans,i-pos[a[i]]+1);
pos[a[i]]=i;///更新位置
continue;
}
s.insert(a[i]);
pos[a[i]]=i;///更新位置
}
if(ans==INF)
cout<<-1<<endl;
else
cout<<ans<<endl;
}
return 0;
}
标签:cin,int,codeforces,pos,Dominated,ans,1257C,INF,include From: https://blog.51cto.com/u_15952369/6035772