YunYan

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

水题,煞笔题,垃圾题

题意弄错了。一开始以为是对于数组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;
}

 

posted on 2019-11-19 20:25  Target--fly  阅读(142)  评论(0编辑  收藏  举报