题意简述
定义“支配数组”:长度>=2,且出现次数最多的那个数字唯一。
给定一个数组,请你求出这个数组中,长度最小的是“支配数组”的连续子序列的长度。
数组长度<=2e5。
思路
最短的“支配连续子序列”,显然是:最左边和最右边两个数字相同,中间的数组两两不同。
设pre[i]表示a中上一个和a[i]的值相同的位置。换句话说,pre[i]=max{j,满足a[j]==a[i]}
那么只要求所有i-pre[i]+1的最小值即可。
代码
1 |
|
LightningUZ 的博客
定义“支配数组”:长度>=2,且出现次数最多的那个数字唯一。
给定一个数组,请你求出这个数组中,长度最小的是“支配数组”的连续子序列的长度。
数组长度<=2e5。
最短的“支配连续子序列”,显然是:最左边和最右边两个数字相同,中间的数组两两不同。
设pre[i]表示a中上一个和a[i]的值相同的位置。换句话说,pre[i]=max{j,满足a[j]==a[i]}
那么只要求所有i-pre[i]+1的最小值即可。
1 | #include <bits/stdc++.h> |