两个对象数组的差集 判断_【前端学算法】两个数组的交集

给定两个数组,计算数组交集。

  1. 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。

  2. 我们可以不考虑输出结果的顺序。

示例

输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]

方法  模拟哈希

思路

遍历第一个数组,将第一个数组的值、该值出现的次数,以(key:value)的形式存储下来,接着遍历第二个数组,判断是否在(key:value)中存在,存在则 value 减去 1,继续。

详解

  1. 定义模拟哈希的对象 hashObject、定义 result 数组存放最终符合条件的结果;

  2. for 循环遍历第一个数组,将数组中每个值作为 key、出现次数作为 value 存到 hashObject 对象中,第一次出现 value 为 1,再次出现 value 加 1;

  3. for 循环遍历第二个数组,判断第二个数组中每个值是否在 hashObject 中存在,即在 hashObject 作为 key 对应的 value 为 1 或者大于 1,如果存在将该值 push 到 result 数组中,并将该值对应的 value 减去 1;

  4. 返回 result 即可;

代码

const intersect = function (nums1, nums2) {  const hashObject = {};  for (let i = 0; i < nums1.length; i++) {    if (hashObject[nums1[i]]) {      hashObject[nums1[i]] += 1;    } else {      hashObject[nums1[i]] = 1;    }  }  const result = [];  for (let j = 0; j < nums2.length; j++) {    if (hashObject[nums2[j]]) {      result.push(nums2[j]);      hashObject[nums2[j]] -= 1;    }  }  return result;};

复杂度分析

  • 时间复杂度:O(n)。分别 for 循环遍历两个数组,每个耗费时间都是 O(n),总的时间复杂度 O(n)。

  • 空间复杂度:O(n)。定义了一个 hashObject 对象存储第一个数组每个值、每个值出现的次数,空间大小最大为 O(n)、定义一个 result 数组存放最终符合条件的结果,空间大小最大为O(n),两者一起空间大小最大为 2n,所以空间复杂度为O(n)。

参考资料

  1. 《算法101》——政采云

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值