You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在两个ArrayList中查找唯一值:寻求优于O(n)的高效方案

优化方案分析与实现

首先明确核心需求:筛选列表A中满足「对应Values集合不包含自身」的元素。原代码性能瓶颈主要来自不必要的集合转换和冗余遍历,以下是针对性优化:

优化思路

  1. 避免不必要的集合转换:原代码中val.Values.toList()会为每个元素创建新的List对象,带来额外内存开销和初始化时间,直接操作原Values集合即可。
  2. 提前终止匹配检查:由于Values最多包含2个元素,一旦在其中找到与当前元素匹配的值,立即停止遍历,减少无效操作。

优化后代码(Kotlin)

// 直接过滤,无需额外列表初始化
val result = A.filter { element ->
    // 检查Values中是否存在与element相等的元素,找到即终止
    !element.Values.any { it == element }
}

或者偏向底层控制的极致优化写法:

val resultList = mutableListOf<YourElementType>()
for (element in A) {
    var containsSelf = false
    for (value in element.Values) {
        if (value == element) {
            containsSelf = true
            break // 找到匹配项,立即终止内层循环
        }
    }
    if (!containsSelf) {
        resultList.add(element)
    }
}

性能说明

原代码时间复杂度为O(n*k)(n是A的长度,k是Values的元素数,最多为2),优化后时间复杂度仍为O(n)但常数项大幅降低——遍历A是不可避免的,但我们消除了集合转换的开销,并尽可能减少内层遍历次数。对于2000+元素的场景,性能提升会非常明显。

验证示例

针对给定示例:

  • 10010的Values为空,any()返回false,因此被保留
  • 10020和99948的Values包含自身,any()返回true,因此被排除
    最终结果为[10010],符合预期。

内容的提问来源于stack exchange,提问作者Py-Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:45:15