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

如何高效检查三个数组中是否存在共同的唯一值?

最佳实现方案

最高效的方式是利用Set数据结构的O(1)查找特性,避免数组includes方法的O(n)时间开销。核心思路是:把其中两个数组转成Set,然后遍历最短的那个数组(减少遍历次数),检查每个元素是否同时存在于两个Set中——只要找到第一个符合条件的元素,就可以直接返回true,不用继续遍历。

具体代码实现

function hasCommonElement(localCodes, standardCodes, specialCodes) {
    // 优先选择最短的数组作为遍历对象,减少循环次数
    const arrays = [localCodes, standardCodes, specialCodes];
    arrays.sort((a, b) => a.length - b.length);
    const [shortest, mid, longest] = arrays;

    // 将后两个数组转为Set,实现O(1)查找
    const midSet = new Set(mid);
    const longestSet = new Set(longest);

    // 遍历最短数组,检查元素是否同时存在于两个Set中
    for (const num of shortest) {
        if (midSet.has(num) && longestSet.has(num)) {
            return true;
        }
    }
    return false;
}

// 测试示例
const localCodes = [1,2,3,4];
const standardCodes = [10,2,11,44];
const specialCodes = [99,98,89,2];
console.log(hasCommonElement(localCodes, standardCodes, specialCodes)); // 输出true

效率说明

  • Set的has方法时间复杂度为O(1),远快于数组includes的O(n)查找
  • 遍历最短数组,最大程度减少循环执行次数
  • 找到符合条件的元素立即返回,避免不必要的遍历

对比原有代码的优化点

你当前的思路是遍历最长数组,这会增加循环次数;而且如果后续用数组includes做查找,内层操作的时间复杂度是O(n),整体会达到O(n²)。而用Set优化后,整体时间复杂度降到O(n)(n为三个数组中最长的长度),执行效率提升明显。

内容的提问来源于stack exchange,提问作者M. Pollino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:43:23