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

相关推荐
GreatSQL社区11 分钟前
主从复制SQL线程中断——字符集砸出的坑
java·数据库·算法
彭亚川Allen16 分钟前
从零手搓 RAG 之检索全流程,给大模型接上自己的知识库
前端·后端·ai编程
IT_陈寒18 分钟前
别让Java字符串拼接偷偷吃掉你的内存
前端·人工智能·后端
软件技术NINI1 小时前
圣罗兰彩妆html+css 4页
前端·css·html
2601_951615201 小时前
网站模板 网站网页模板下载
前端·网络·html
Tisfy1 小时前
LeetCode 2333.最小差值平方和:排序 + 数学计算(不用二分)
数学·算法·leetcode·题解·贪心·排序
aqiu1111111 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
酷炫码神2 小时前
Day 1|HTML5:一个商城首页的骨架,从 DOCTYPE 到语义化
前端·html·html5
AI源码2 小时前
鲜花商城(HTML 版)
前端·html
hiahiahia1232 小时前
Message 和对话
服务器·前端·数据库