LeetCode -- 349. 两个数组的交集(简单)

349. 两个数组的交集

题目描述

给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

输入/输出示例

bash 复制代码
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

关键思路

解法1

  • 将一个数组转成Set去重,遍历另一个数组,看其值是不是在Set中。
  • 这样的问题就是结果可能存在重复,所以结果也要用Set处理
JS代码实现
javascript 复制代码
const intersection = (nums1, nums2) => {
    const set1 = new Set(nums1);
    const result = new Set();

    for (const num of nums2) {
        if (set1.has(num)) {
            result.add(num);
        }
    }
    return Array.from(result);
};
复杂度分析
  • 时间复杂度:O(m + n)
  • 空间复杂度:O(min(m, n))

解法2

  • 将两个数组都转出Set,如此,两个Set中,都不存在重复元素。
JS代码实现
javascript 复制代码
const intersection = (nums1, nums2) => {
    const set1 = new Set(nums1);
    const set2 = new Set(nums2);
    const result = [];

    for (const num of set1) {
        if (set2.has(num)) {
            result.add(num);
        }
    }
    return result;
}
复杂度分析
  • 时间复杂度:O(m + n)
  • 空间复杂度:O(m + n)

两种算法对比

  • 两种算法没有太大的区别,算法1只将一个数组转成了Set,空间利用上较好。
  • 算法2将两个数组都转成了Set,当两个数组很长,且存在重复元素时,该算法较优。

结语

本文主要介绍了LeetCode第349题两个数组的交集的解法,你还知道这题的其他解法吗?欢迎在评论区留言分享!

相关推荐
赵_叶紫7 分钟前
Node.js 知识点梳理与实战代码
前端
颜酱15 分钟前
从0到1实现LRU缓存:思路拆解+代码落地
javascript·后端·算法
IT_陈寒18 分钟前
JavaScript这5个隐藏技巧,90%的开发者都不知道!
前端·人工智能·后端
明月_清风1 小时前
小程序云函数:从入门到全栈的“降维打击”指南
前端·微信小程序·小程序·云开发
wuhen_n1 小时前
告别 Options API:为什么 Composition API 是逻辑复用的未来?
前端·javascript·vue.js
明月_清风1 小时前
前端异常捕获:从“页面崩了”到“精准定位”的实战架构
前端·javascript·监控
wuhen_n2 小时前
高效的数据解构:用 toRefs 和 toRef 保持响应性
前端·javascript·vue.js
小兵张健12 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_12 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js