专栏文章
题解:AT_abc395_c [ABC395C] Shortest Duplicate Subarray
AT_abc395_c题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miq3cu8z
- 此快照首次捕获于
- 2025/12/03 22:17 3 个月前
- 此快照最后确认于
- 2025/12/03 22:17 3 个月前
这题很水。
问题陈述
给你一个正整数 和一个长度为 的整数序列 。请判断 是否存在一个非空(连续)子数组,它有一个重复值,在 中出现多次。如果存在这样的子数组,求最短的子数组的长度。
思路:
- 我们可以定义一个数组 ,用来标记 的位置。
- 当循环到 时,若 则 之前出现过,符合题目中所说的数组,用变量 求最短长度。
- 为啥 出现了两次就比较长度呢?因为题目让我们求最短的子数组的长度。所以出现了两次就符合条件了,没必要再看第三次出现的位置。
- 如果 ,那么标记一下 出现的位置 。
#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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...