【发布时间】:2021-01-06 20:19:36
【问题描述】:
一种算法,用于查找我可以将列表分成两部分的方法数量,以便左侧的每个项目都小于右侧的每个项目。
目前,我有以下功能,但这并不完全有效...此外,我需要能够在 O(n) 中执行此操作,因为嵌套循环不是这个功能...
def get_subsets(l):
n = len(l)
subsets = []
for i in range(n + 2):
for j in range(i + 2, n + 1):
if l[i:j][-1] > l[i:j][-2]:
subsets.append(l[i:j])
return subsets
例如对于输入 [2,1,2,5,7,6,9] 将有 3 种方式 [2,1,2], [5,7,6,9]、[2,1,2,5], [7,6,9]、[2,1,2,5,7,6], [9].
我当前的函数只返回
[[2, 1, 2],
[2, 1, 2, 5],
[2, 1, 2, 5, 7],
[2, 1, 2, 5, 7, 6, 9],
[1, 2],
[1, 2, 5],
[1, 2, 5, 7],
[1, 2, 5, 7, 6, 9],
[2, 5],
[2, 5, 7],
[2, 5, 7, 6, 9],
[5, 7],
[5, 7, 6, 9],
[7, 6, 9],
[6, 9]]
为此...我应该做什么样的修改?
【问题讨论】:
标签: python dynamic dynamic-programming