【发布时间】:2018-11-12 20:02:09
【问题描述】:
array =[1,2,3,4]
结果子数组应该是...
[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]
【问题讨论】:
-
祝你好运,因为我认为你做不到。至少,当 N = 输入大小时。
标签: python arrays algorithm sub-array
array =[1,2,3,4]
结果子数组应该是...
[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]
【问题讨论】:
标签: python arrays algorithm sub-array
O(n)?也许如果你有无限的内存,每个可能的子数组都存储在实数/虚数系统中以进行有效访问,那么当然,你可以拥有任何你喜欢的复杂性算法。
...但实际上,无论您执行的效率如何,您都会看到 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) 的解决方案,您可以搜索得到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]]
【讨论】: