两个数组的交集

JavaScript实现LeetCode第349题:两个数组的交集web

题目描述

给定两个数组,编写一个函数来计算它们的交集。算法

示例 1:数组

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]

示例 2:微信

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

说明:编辑器

  • 输出结果中的每一个元素必定是惟一的。
  • 咱们能够不考虑输出结果的顺序。

解题思路

幼稚的方法是根据第一个数组 nums1 迭代并检查每一个值是否存在在 nums2 内。若是存在将值添加到输出。这样的方法会致使 O(nxm) 的时间复杂性,其中 n 和 m 是数组的长度。函数

使用set 来实现线性时间复杂度spa

解法方法

/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/

var intersection = function(nums1, nums2) {
// 使用 set 来存储结果
const result = new Set();
const set2 = new Set(nums2);
for(let i = 0; i < nums1.length; i++) {
// set查找的时间复杂度为 O(1)
if(set2.has(nums1[i])) {
result.add(nums1[i]);
}
}
// 最后须要将set转成数组
return Array.from(result);
};

复杂度分析

  • 时间复杂度是:O(n),实际为( m + n),m为nums1的个数,n为 set2 (PS: 系数能够忽略)
  • 空间复杂度:O(n),咱们忽略存储答案所使用的空间,由于它对算法自己并不重要。

参考

LeetCode第349题:两个数组的交集题解.net

本文分享自微信公众号 - 牧码的星星(gh_0d71d9e8b1c3)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。code

相关文章
相关标签/搜索