List 科特林:确定两个列表是否有任何公共元素的最佳方法是什么?

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()

如果两个列表至少有一个共同元素,那么最好的方法是什么?我试图在kotlin做到这一点,虽然这很容易,但我想探索哪种方法是最好的

问题:

fun isAnyElementCommon(
    alist: List<String>,
    blist: List<String>
):Boolean
fun isAnyElementCommon(
名单,,
列表:列表
):布尔值
一个例子是:

=alist.intersect(blist).isNotEmpty()

但我认为这是太多的处理,无法找出所有的公共值,然后检查它是否为空

编辑

另一个是:

=alist.any{blist.contains(it)}

我知道这些解决办法。我只是想知道是否有更好的方法来解决这个问题。如果没有,那也可以。我正在寻找一个低复杂性和低内存占用的解决方案。此外,在kotlin中,大多数情况下都包含在一些助手扩展函数中。所以如果有这样的事情。我想知道

  • 将一个列表放入哈希映射
  • 迭代第二个列表,如果哈希映射中存在第二个列表中的元素,则返回true
  • 要将其降到O(n),请先将一个列表转换为一个集合

    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个,那么分配时间可能不值得。但也许你更注重记忆而不是速度。