如果输入是一个类似以下的列表嵌套列表
[[2,1], [1,3], [4,5], [6,8], [4,7]]
如何找到一个/最大的子集,使得其中没有重复/共享元素?
例如,对于此示例,答案可能是:
[2,1], [4,5], [6,8]
或者
[1,3], [6,8], [4,7]
但是一个无效的答案将会是
[2,1],[1,3],[4,5]
因为这里出现了两个1,所以需要去重。
我的当前方法是递归的方法,使用这个思路:在构建子集时,我要么选择第一个元素,要么不选择第一个元素,但这个方法似乎太慢了。
目前的成果是:它只返回最大子集的大小而不是实际的子集,但一旦大小正常工作,获取实际子集应该很容易。
def disjointSets(allSets):
maxCount = 0
used = set()
def findDisjoint(currCount, arr):
nonlocal maxCount
if not arr:
maxCount = max(maxCount, currCount)
return
elif arr[0][0] in used or arr[0][1] in used:
findDisjoint(currCount, arr[1:])
return
else:
used.add(arr[0][0])
used.add(arr[0][1])
findDisjoint(currCount + 1, arr[1:])
used.clear()
findDisjoint(currCount, arr[1:])
return
findDisjoint(0, allSets)
return maxCount
disjointSets([[1,2],[3,4],[5,6],[1,3],[2,4]])
输出了4
,哦哦... - Kelly Bundy