我有一個數字如何找到列表中項目的最大數目,以便某些對不在輸出中?
l = [1,2,3,4,5]
的列表和描述了哪些項目不應該在輸出在一起元組的列表。
gl_distribute = [(1, 2), (1,4), (1, 5), (2, 3), (3, 4)]
可能的名單
[1,3]
[2,4,5]
[3,5]
,我想我的算法給我第二個[2,4,5]
我想遞歸地做到這一點。 在第一種情況下(t1),我用除第一個以外的所有項目調用遞歸算法,在第二種情況下(t2)我再次調用它,從gl_distribute中刪除第一個項目出現的對。 這裏是我的算法
def check_distribute(items, distribute):
i = sorted(items[:])
d = distribute[:]
if not i:
return []
if not d:
return i
if len(remove_from_distribute(i, d)) == len(d):
return i
first = i[0]
rest = items[1:]
distr_without_first = remove_from_distribute([first], d)
t1 = check_distribute(rest, d)
t2 = check_distribute(rest, distr_without_first)
t2.append(first)
if len(t1) >= len(t2):
return t1
else:
return t2
的remove_from_distribute(項目,distr_list)去除distr_list包括任何在項目中的項目的對。我的輸出是[4, 5, 3, 2, 1]
這顯然是不正確的。你能告訴我我在這裏做錯了嗎?或者你能給我一個更好的方法來解決這個問題嗎?
怎麼樣'4,5','5,2'等...我不明白你的,*可能的名單* – 2014-10-01 00:02:32
@PadraicCunningham我想*可能的列表*意味着*可能的最大列表*(即你不能再添加一個)。問題是如何找到最長的最大列表。 – btilly 2014-10-01 00:14:43
如果您有兩個相同長度的列表會發生什麼? – 2014-10-01 00:48:44