List 科特林:确定两个列表是否有任何公共元素的最佳方法是什么?
如果两个列表至少有一个共同元素,那么最好的方法是什么?我试图在kotlin做到这一点,虽然这很容易,但我想探索哪种方法是最好的 问题:List 科特林:确定两个列表是否有任何公共元素的最佳方法是什么?,list,algorithm,performance,kotlin,optimization,List,Algorithm,Performance,Kotlin,Optimization,如果两个列表至少有一个共同元素,那么最好的方法是什么?我试图在kotlin做到这一点,虽然这很容易,但我想探索哪种方法是最好的 问题: fun isAnyElementCommon( alist: List<String>, blist: List<String> ):Boolean fun isAnyElementCommon( 名单,, 列表:列表 ):布尔值 一个例子是: =alist.intersect(blist).isNotEmpty()
fun isAnyElementCommon(
alist: List<String>,
blist: List<String>
):Boolean
fun isAnyElementCommon(
名单,,
列表:列表
):布尔值
一个例子是:
=alist.intersect(blist).isNotEmpty()
但我认为这是太多的处理,无法找出所有的公共值,然后检查它是否为空
编辑
另一个是:
=alist.any{blist.contains(it)}
我知道这些解决办法。我只是想知道是否有更好的方法来解决这个问题。如果没有,那也可以。我正在寻找一个低复杂性和低内存占用的解决方案。此外,在kotlin中,大多数情况下都包含在一些助手扩展函数中。所以如果有这样的事情。我想知道
fun isAnyElementCommon(
aList: List<String>,
bList: List<String>
):Boolean {
val aSet = aList.toSet()
return bList.any { it in aSet }
}
fun isAnyElementCommon(
名单,,
列表:列表
):布尔值{
val aSet=aList.toSet()
返回bList.any{it in aSet}
}
您可以经典地迭代一个列表,检查另一个列表是否包含当前元素,然后在第一次匹配时停止。对于最坏的情况(没有公共元素),也需要大量处理。也许可以比较两种想法的表现……如果你想优化时间,请使用地图/字典。如果空间更重要,使用排序和二进制搜索O(NlogN)@ShridharRKulkarni no,唯一好的答案只能以一种方式解决它。该评论有更好的解决方案,但它不是以回答的形式出现的,因为它的成本很高。它创建了一个比O(n^2)更便宜的新设置。如果列表中的元素少于10个,那么分配时间可能不值得。但也许你更注重记忆而不是速度。