【发布时间】:2013-07-14 10:39:03
【问题描述】:
有一个从0-n 索引的数组(即size=n)包含来自0-m 的元素,其中m < n(假设m 比n 小100 或1000 倍,即m 远小于n),所以很多的元素或子数组必须重复,我们必须找到大小为 1 或大于 1 的重复子数组的数量。例如,考虑一个数组1 2 4 1 2 4 1 5 6 3 5,这里1 是重复 2 次2 重复 1 次4 重复 1 次5 重复 1 次1 2 重复 1 次2 4 是重复 1 次4 1 重复 1 次1 2 4 重复 1 次2 4 1 重复 1 次1 2 4 1 重复 1 次
所以最终的答案是这些的总和,即 11
任何人都可以建议一些数据结构或有效的算法来解决这个问题。我正在考虑散列 m 并注意它出现的索引值但没有正式化它。
假设n,m < 10^5
【问题讨论】:
-
我可以给你一个“模式”:
Floor[12412415635 / (10 ^ (10 - n))] mod 10。它有效,但这对你来说是一个可以接受的模式吗?可能不是。您需要指定究竟您认为什么是“模式”。除非你能给出一个规范,否则你无法实现它。 -
@phant0m 我已经编辑了这个问题。希望现在很清楚。我的意思是计算重复的子数组
-
您可能可以为此使用后缀数组,但我不确定算法究竟是什么。
-
"所以最终的答案是这些的总和,即 8" 为什么是 8? 241 也重复一次。所以这将是 9 的总和。还是我错了?
-
@FabianBigler 哎呀我错过了 :)