📅  最后修改于: 2023-12-03 15:42:05.840000             🧑  作者: Mango
当我们需要在一个数组中寻找重复出现的子数组时,我们需要找到最小的重复子数组。这个问题可以通过以下方式解决。
下面是用Go语言实现的代码,供参考。
func findMinSubArray(arr []int) []int {
n := len(arr)
subArrays := make(map[string][]int)
for i := 2; i <= n; i++ {
for j := 0; j <= n-i; j++ {
subArr := arr[j : j+i]
str := fmt.Sprintf("%v", subArr)
subArrays[str] = append(subArrays[str], j)
}
}
minLen := n
var res []int
for _, v := range subArrays {
if len(v) < 2 {
continue
}
for i := 0; i < len(v)-1; i++ {
if v[i+1]-v[i] < minLen {
minLen = v[i+1] - v[i]
res = arr[v[i] : v[i]+i+2]
}
}
}
return res
}
用以下数组调用上述函数:
arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 11, 12, 13, 14, 15, 16, 2, 3}
fmt.Println(findMinSubArray(arr))
运行结果为:
[2 3]
说明在数组中找到了长度为2的最小重复子数组。
本文介绍了如何在一个数组中寻找重复出现的最小子数组,通过实现一种简单有效的算法并结合实例加深理解。