Codeforces 1257C Dominated Subarray

思路:

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;
}
原文地址:https://www.cnblogs.com/yuhan-blog/p/12308872.html