如何以有效的方式获取长度为 2 或更长的数组的所有子数组?

How to get all sub arrays of an array of length 2 or more in efficient way?

array =[1,2,3,4]

结果子数组应该是...

[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]

O(n)?也许如果你有无限的内存,存储了 real/imaginary 数字系统中的每个可能的子数组以便高效访问,那么当然,你可以有任何你喜欢的复杂算法。

...但实际上,无论您的效率如何,您都在看 O(n^3) 的东西。

>>> [lst[i:j + 1] for i in range(len(lst)) for j in range(i + 1, len(lst))]
[[1, 2], [1, 2, 3], [1, 2, 3, 4], [2, 3], [2, 3, 4], [3, 4]]

一个衬里隐藏了两个循环和切片操作,所有这些都增加了复杂性。然而,它是高效快速,正如底层算法所允许的那样。

您无法以任何方式在 O(N) 中获得结果。
由于有 2^N - 1 - N 个大小 > 1 的子数组,因此总复杂度为 O(2^N),因为您必须获取所有子数组。
对于 O(2^N) 解决方案,您可以搜索 well known problem of getting power set of a set.

您总是可以尝试这个 itertools.combinations() 解决方案来获取长度为 2 或更大的所有连续子数组:

>>> from itertools import combinations
>>> array = [1, 2, 3, 4]
>>> [array[start:end+1] for start, end in combinations(range(len(array)), 2)]
[[1, 2], [1, 2, 3], [1, 2, 3, 4], [2, 3], [2, 3, 4], [3, 4]]