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

Arrays 以O(n)复杂度查找数组的所有连续子数组,arrays,algorithm,Arrays,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)完成了这项工作,但是对于需要大量时间和内存的大型输入 这个问题有什么具体的算法吗?确切地说,有n(n+1)/2个子阵列,它们可以写为所有i和所有j的[i..j]≥我生成所有对的算法是即时的(双循环),无法改进 如果只需要输出对(i,j),空间

我一直在寻找一个解决方案,以最小时间复杂度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)完成了这项工作,但是对于需要大量时间和内存的大型输入

这个问题有什么具体的算法吗?

确切地说,有n(n+1)/2个子阵列,它们可以写为所有i和所有j的[i..j]≥我生成所有对的算法是即时的(双循环),无法改进

如果只需要输出对(i,j),空间O(1)就足够了。如果需要存储所有对,请选择O(n²)。如果需要完整存储所有子阵列,O(n³);在这种情况下,时间也不可避免地增长到O(n³),并且存在另一个嵌套循环


更新:

这个答案没有考虑注释中的约束“这些单独子数组的总和产生完美的平方根”,这是在事实之后添加的,不能被视为问题的一部分。

有n(n+1)/2个子数组,可以写成[i..j]表示所有i和所有j≥我生成所有对的算法是即时的(双循环),无法改进

如果只需要输出对(i,j),空间O(1)就足够了。如果需要存储所有对,请选择O(n²)。如果需要完整存储所有子阵列,O(n³);在这种情况下,时间也不可避免地增长到O(n³),并且存在另一个嵌套循环


更新:


这个答案没有考虑注释中的约束“这些单独子数组的总和产生完美的平方根”,这是在事实之后添加的,不能被视为问题的一部分。

欢迎访问stackoverflow.com。请花些时间阅读,特别是命名和。也请和。最后请阅读。由于输出将包含O(n²)子阵列,因此无法在O(n)时间内生成它们。您是否有问题的确切描述?正如@trincot所提到的,你写的信息似乎不可能。@MitchelPaulin:计数需要O(1)。声明中说,要从给定数组中找到子数组的数量,其中这些单个子数组的总和会导致ex的完美平方根:-在[1,2,3,4]中,有3个子数组的和是完美平方根,即[1],[4],[2,3,4]欢迎访问stackoverflow.com。请花些时间阅读,特别是命名和。也请和。最后请阅读。由于输出将包含O(n²)子阵列,因此无法在O(n)时间内生成它们。您是否有问题的确切描述?正如@trincot所提到的,你写的信息似乎不可能。@MitchelPaulin:计数需要O(1)。声明中说,要从给定数组中找到子数组的数量,其中这些单个子数组的总和会导致ex的完美平方根:-在[1,2,3,4]中,有3个子数组的和是完美平方根,即[1],[4],[2,3,4]