小编use*_*861的帖子

最长重复子数组(有重叠)

给定一个任意数字的数组,我希望快速[时间和空间复杂度至少低于 O(n\xc2\xb2),n = 数组长度]找到最长的子数组(数组中元素的连续段)重复(出现多次,或至少两次)。
\n除了所有值都是有效的 JavaScript 数字并且isFinite对于数组中的每个数字都成立之外,请不要假设数组中数字的任何界限。

\n

允许重叠,即允许子数组在其内部部分出现。例如,在数组中[1, 2, 1, 2, 1, 2]最长的重复子数组是[1, 2, 1, 2]。看这里

\n
[1, 2, 1, 2, 1, 2]\n^         ^        occurrence #1\n       ^        ^  occurrence #2\n
Run Code Online (Sandbox Code Playgroud)\n

两次出现重叠,但只要两次出现的起始索引或结束索引不同就可以。

\n

如果存在多个不同的重复子数组且它们都具有最长的长度,则答案可以是其中任何一个。然而,我怀疑任何能够找到一个答案的方法都可以同样轻松地找到所有答案。
\n此场景的一个示例是数组[1, 1, 2, 2]。子数组[1][2]都出现两次。其中任何一个都可以作为结果返回。

\n

最后,如果没有子数组出现多次,则答案是[](空数组)。

\n

我最近遇到了“在数组中查找重复序列”的问题,但所有答案都慢得离谱。每个人都在使用 o(n\xc2\xb3) 个解决方案,而 o(n\xc2\xb2) 中只有一个答案。

\n

我正在寻找一种可以在几秒钟内处理长度高达几十万(100,000)的数组的方法。时间复杂度至少为次二次方。如果您也能提供解决方案的 JS 示例实现,那就太好了,因为我对某些数据结构的理解不是那么扎实

\n

抱歉问了这么长的问题,如果有任何不清楚的地方请告诉我。如果您有一个想法但不是完整的解决方案,请将其放在评论中,它仍然对我有帮助。

\n

如果有帮助的话我还举了一些例子:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
大批结果
[1, 2, 5, 7, 1, …

javascript arrays algorithm time-complexity

8
推荐指数
1
解决办法
486
查看次数

标签 统计

algorithm ×1

arrays ×1

javascript ×1

time-complexity ×1