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

标签 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,可以将其写为 A[i..j]。生成所有对的算法是立即的(双循环)并且无法改进。

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


更新:

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

关于arrays - 以 O(n) 复杂度查找数组的所有连续子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52457957/

相关文章:

algorithm - f(n)=log n 的大师定理

python - 以(逆时针)顺序排列凹面多边形顶点?

javascript - 创建一个数组的数组

javascript - 点击添加句子+数组编号,结果每行<br>

C- 对指向可以为正数或负数的整数的指针数组进行排序

JavaScript。如何比较输入数组

c# - 查找两个列表中的差异

arrays - 通过递归查找数组中的最大值

algorithm - 用较小的形状(圆形)填充多边形

algorithm - 通知系统的设计问题