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题两个数组的交集的解法,你还知道这题的其他解法吗?欢迎在评论区留言分享!

相关推荐
逻辑君6 分钟前
Foresight研究报告【20260011】
人工智能·线性代数·算法·矩阵
珊瑚里的鱼6 分钟前
【动态规划】不同路径Ⅱ
算法·动态规划
anOnion25 分钟前
构建无障碍组件之Slider Pattern
前端·html·交互设计
云水一下32 分钟前
JavaScript 从零基础到精通系列:前世今生与编程启蒙
前端·javascript
月亮邮递员61632 分钟前
Markdown语法总结
开发语言·前端·javascript
Kurisu5751 小时前
雾锁王国修改器下载2026最新
前端·修改器代码
适应规律1 小时前
【无标题】
人工智能·python·算法
Rain5091 小时前
mini-cc 的 MCP 协议:给 AI 装个 USB-C 接口
c语言·开发语言·前端·人工智能·架构·node.js·ai编程
蒟蒻的贤1 小时前
关于文法G2算符优先分析的一个坑
算法
变量未定义~1 小时前
单调栈、单调队列(模板)、子矩阵、连通块中点的数量、堆箱子(4星)
算法