我坚持寻找一种解决方案,以最小的时间复杂度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)来完成此操作,但是对于大型输入而言,这会占用大量时间和内存。
有没有针对此问题的特定算法
答案 0 :(得分:1)
确切有n(n + 1)/ 2个子数组,对于所有i和所有j≥i,都可以写为A [i..j]。生成所有对的算法是即时的(双循环),无法改进。
如果只需要输出对(i,j),则空间O(1)就足够了。如果您需要存储所有对,则为O(n²)。如果您需要存储所有所有子数组,则O(n³);在这种情况下,时间也不可避免地增加到O(n³),并且存在另一个嵌套循环。
更新:
该答案未考虑注释中的约束“这些单个子数组的总和导致完美平方根”,该约束是在事实之后添加的,因此不能视为问题的一部分。