【问题标题】:How to get all sub arrays of an array of length 2 or more in efficient way?如何以有效的方式获取长度为 2 或更长的数组的所有子数组?
【发布时间】: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


【解决方案1】:

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]]

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您总是可以尝试这个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]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 2017-05-29
        • 2015-08-05
        • 2015-08-14
        相关资源
        最近更新 更多