找出O(n)复杂度的所有数组连续子数组

时间:2018-09-22 15:06:17

标签: algorithm

我坚持寻找一种解决方案,以最小的时间复杂度O(n)查找给定数组的所有连续子数组。例如: [1,2,3,4]子数组是[1] [2] [3] [4] [1,2] [2,3] [3,4] [1,2,3] [2,3, 4] [1,2,3,4]

我用时间复杂度O(n ^ 2)来完成此操作,但是对于大型输入而言,这会占用大量时间和内存。

有没有针对此问题的特定算法

1 个答案:

答案 0 :(得分:1)

确切有n(n + 1)/ 2个子数组,对于所有i和所有j≥i,都可以写为A [i..j]。生成所有对的算法是即时的(双循环),无法改进。

如果只需要输出对(i,j),则空间O(1)就足够了。如果您需要存储所有对,则为O(n²)。如果您需要存储所有所有子数组,则O(n³);在这种情况下,时间也不可避免地增加到O(n³),并且存在另一个嵌套循环。


更新

该答案未考虑注释中的约束“这些单个子数组的总和导致完美平方根”,该约束是在事实之后添加的,因此不能视为问题的一部分。