我正在尝试使用贪婪准备面试,我提出了一个问题,这个问题不是愚蠢的任务,我不知道编写提供解决方案的算法。我知道这听起来像大学的家庭作业,但遗憾的是那些日子已经消失了,我们从来没有这种复杂的算法,所以我没有同事要求解决方案,这就是为什么我在这里问你们。
我最熟悉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]]
答案 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,以使切割必须至少包含一个元素。