JavaScript实现-LeetCode刷题-【 两个数组的交集】-第349题!!!

题目:

LeetCode题目链接

题目截图:

LeetCode刷题

解题步骤:

第一种方式,使用集合:
1.用集合对nums1去重
2.遍历nums1,筛选出nums2也包含的值
第二种方式,使用字典:
1.新建一个字典,遍历nums1,填充字典
2.遍历nums2,遇到字典里的值就选出,并从字典中删除,防止重复

代码:

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function (nums1, nums2) {
  // 第一种方式,使用集合
  //return [...new Set(nums1)].filter(n => nums2.includes(n));

  // 第二种方式,使用字典
  const map = new Map();
  nums1.forEach(n => {
    map.set(n, true);
  });
  const res = [];
  nums2.forEach(n => {
    if (map.get(n)) {
      res.push(n);
      map.delete(n);
    }
  });
  return res;
};

时间复杂度分析:

第一种方式:
时间复杂度是O(m * n),m是nums1去重之后的长度,n是nums2的长度,因为是两层循环。
第二种方式:
时间复杂度是O(p + n),p是nums1的长度,n是nums2的长度

空间复杂度分析:

第一种方式:
空间复杂度是O(m),m是nums1去重之后的长度
第二种方式:
空间复杂度是O(m),m是nums1去重之后的长度

怎么样,是不是很简单,你学会了吗?

LeetCode刷题

如果这篇文章能够帮助到您,希望您不要吝惜点赞👍👍和收藏💖💖,您的支持是我继续努力的动力 💪💪!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值