水题,煞笔题,垃圾题
题意弄错了。一开始以为是对于数组a,首先哦按判断出现最多的次数的元素是否唯一,不唯一的话直接输出-1,唯一的话在保存位置相邻相减找到最小。。。
题目大意:a的一个子区间满足出现的次数最多的元素为1即可。
保存位置,直接暴力求相同元素相邻位置区间长度找到最小值即可。
#include<bits/stdc++.h> using namespace std; const int N=2E5+7; int arr[N]; int mark[N]; int b[N]; vector<int >ve[N]; void solve(){ memset(b,0,sizeof b); memset(mark,0,sizeof(mark)); int n; cin>>n; int x; int ans=0,point; for(int i=1;i<=n;i++) ve[i].clear(); for(int i=1;i<=n;i++){ cin>>x; ve[x].push_back(i); } int sum=100000000; for(int i=1;i<=n;i++){ if(ve[i].size()==1) continue ; for(int j=1;j<ve[i].size();j++){ sum=min(ve[i][j]-ve[i][j-1]+1,sum); } } if(sum==100000000){ printf("-1\n"); return ; } cout<<sum<<endl; } int main(){ int t; cin>>t; while(t--){ solve(); } return 0; }