题解:AT_abc395_c [ABC395C] Shortest Duplicate Subarray

· · 题解

这题很水。

问题陈述

给你一个正整数 N 和一个长度为 N 的整数序列 A。请判断 A 是否存在一个非空(连续)子数组,它有一个重复值,在 A 中出现多次。如果存在这样的子数组,求最短的子数组的长度。

思路:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e6+5;
int a[maxn];
int vis[maxn];
signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int mini=INT_MAX;
    for(int i=1;i<=n;i++){
        if(vis[a[i]]){
            mini=min(mini,i-vis[a[i]]+1);
        }
        vis[a[i]]=i;
    }
    if(mini==INT_MAX) mini=-1;
    cout<<mini<<"\n";
    return 0;
}