【发布时间】:2019-08-18 05:29:57
【问题描述】:
我有一个列表列表,需要根据列表项的常见情况进行合并。共享元素的列表需要合并在一起形成集群。
我考虑过广度优先遍历来做这件事,但是由于列表列表的排列方式,很难实现遍历
列表示例:
input:
[
[1,2,3],
[2,4,5],
[4,6,8],
[9,10,16],
[16,18,19],
[20,21,22]
]
output: [[1,2,3,4,5,6,8], [9,10,16,18,19], [20,21,22]]
前三个列表需要合并成一个列表(第一个列表和第二个列表有2个,第二个和第三个列表共享4个),第四个和第五个需要合并,因为两个共享16个。第三个是未与任何其他列表合并,因为它不与其他列表共享任何元素。
虽然这可以在 O(n^2) 时间内完成(n 是列表的数量),但我正在努力寻找最有效的方法。
【问题讨论】:
-
内部列表是否总是排序([1,2,3])?是否还有其他我们需要注意的限制/规则?
-
内部列表未排序。但是,在创建列表期间可以完成。没有与该问题相关的任何其他限制。
-
“很难实现遍历”,你是说你不是在寻找有图的解决方案,或者你接受它们但还没有找到简单的解决方案?
-
可以将这些内部列表视为集合吗?它们似乎没有重复,并且存在使用集合执行此操作的代码。
-
是的,没有重复
标签: python algorithm computer-science graph-algorithm