349. 两个数组的交集 - 力扣(LeetCode)
发布:2021年9月24日23:06:20
问题描述及示例
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
提示:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
我的题解
我的题解1(Array.filter() & Set数组去重)
利用JavaScript的数组对象的 filter()
函数可以筛选出两个数组中共有的元素。但是注意这些共有的元素可能出现重复的情况。也就是我们无法保证通过 filter()
函数筛选出的元素具有唯一性,所以需要对这些元素再进行去重操作。
而去重操作则可以交由 Set
类型的数据来完成。数据在 Set
中完成去重后,最后利用展开语法来将去重后的元素放入一个数组,并将该数组作为返回值返回。
所有这些过程都可以在一条语句内完成,这也是得益于JavaScript的语言特性。
当然这一切的前提是得先理解 Array.filter()
、Set
和展开语法这三个关键点。相关描述可看下方MDN文档:
参考:Array.prototype.filter() - JavaScript | MDN
参考:Set - JavaScript | MDN
参考:展开语法 - JavaScript | MDN
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
return [...new Set(nums1.filter((num) => nums2.includes(num)))];
};
提交记录
55 / 55 个通过测试用例
状态:通过
执行用时:72 ms, 在所有 JavaScript 提交中击败了73.83%的用户
内存消耗:38.7 MB, 在所有 JavaScript 提交中击败了92.71%的用户
时间:2021/09/24 23:09
可以看到,这种做法的性能还是不错的,但是多少是有点作弊的味道,因为利用了大量的JavaScript特性来解决。
当然,其中数组去重还有很多种方法,可以参考下面的文章:
官方题解
更新:2021年7月29日18:43:21
因为我考虑到著作权归属问题,所以【官方题解】部分我不再粘贴具体的代码了,可到下方的链接中查看。
更新:2021年9月24日23:31:30
【更新结束】
有关参考
更新:2021年9月24日23:07:47
参考:Array.prototype.filter() - JavaScript | MDN
参考:Set - JavaScript | MDN
参考:展开语法 - JavaScript | MDN
参考:解构赋值 - JavaScript | MDN
参考:【微信公众号:前端新世界 2021-05-26】亲测有效:JS 中数组去重的 9 种高阶方法