返回阵列A的所有可能的削减如果已定义了部件数量M

时间:2017-03-13 14:24:50

标签: arrays algorithm

我正在尝试使用贪婪准备面试,我提出了一个问题,这个问题不是愚蠢的任务,我不知道编写提供解决方案的算法。我知道这听起来像大学的家庭作业,但遗憾的是那些日子已经消失了,我们从来没有这种复杂的算法,所以我没有同事要求解决方案,这就是为什么我在这里问你们。

我最熟悉javascript,但任何语言都可以。

任务:

  

假设你输入的数组A输入长度为N,你就可以了   还输入数字M,它定义了您需要多少个数组切割   有。目标是返回所有可能的削减。

     

N / M <= 1

例如,如果你有数组A = [1,2,3,4]和M = 2

解决方案是包含数组的数组L

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

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

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

1 个答案:

答案 0 :(得分:1)

我确信存在更有效的算法,但我会这样做。

def findAllCuts(array,length,cuts):
    cuts = []
    for i in range(0,length-cuts):
        cut = array[:i]
        subCuts = findAllCuts(array[i:],length-i,cuts-1)
        for j in range(len(subCuts)):
            cuts.add(cut+subCuts[j])
    return cuts

它应该经历所有可能的第一次削减,并在第一次削减时对所有未来的削减进行递归 如果不允许空切,则将第3行中的0更改为1,以使切割必须至少包含一个元素。