专栏文章

题解:AT_abc395_c [ABC395C] Shortest Duplicate Subarray

AT_abc395_c题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miq3ecpz
此快照首次捕获于
2025/12/03 22:18
3 个月前
此快照最后确认于
2025/12/03 22:18
3 个月前
查看原文

题目大意:

nn 个数,求一个最短子序列,使得这个子序列里有重复的元素。

方法:

vectorvector 存每个数的下标,便利 111e61e6 的所有数,如有出现多次的数,每次求两个相同数的下标的差,再将这些差求最小值。
AC code:
CPP
#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 10;

int n;
vector<int> g[1000010];

int main(){
	cin >> n;
	for (int i = 1; i <= n; ++i){
		int a;
		cin >> a;
		g[a].push_back(i);	
	}
	int minn = 0x3f3f3f3f;
	for (int i = 1; i <= 1e6; ++i){
		if (g[i].size() < 2) continue;
		for (int j = 1; j < g[i].size(); ++j)
			minn = min(g[i][j] - g[i][j - 1] + 1, minn);
	}
	if(minn == 0x3f3f3f3f) cout << -1;
	else cout << minn;
	return 0;	
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...