Open AmelloAster opened 4 years ago
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。 进阶:
如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种方法更优? 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
var intersect = function (nums1, nums2) { let minA = nums1.length >= nums2.length ? nums2 : nums1 let maxA = nums1.length < nums2.length ? nums2 : nums1 let minR = {} let maxR = {} maxA.forEach((i, d) => { if (minA[d] !== undefined) { if (!minR[minA[d]]) { minR[minA[d]] = { val: minA[d], c: 1, } } else { minR[minA[d]].c++ } } if (!maxR[i]) { maxR[i] = { val: i, c: 1, } } else { maxR[i].c++ } }) let minArr = Object.values(minR) let maxArr = Object.values(maxR) let array = [] minArr.forEach(i => { let target = maxArr.find(r => r.val === i.val) if (target) { if (i.c > target.c) { array.push(...new Array(target.c).fill(i.val)) } else { array.push(...new Array(i.c).fill(i.val)) } } }) return array; }
给两个数组创建两个对象记录每个元素出现的次数 然后对比两个对象重复出现的值得次数 创建一个新数组整理答案
执行结果: 通过 显示详情 执行用时:104 ms, 在所有 JavaScript 提交中击败了8.55%的用户 内存消耗: 36.9 MB, 在所有 JavaScript 提交中击败了12.50%的用户
题目
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
示例 2:
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。 进阶:
如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种方法更优? 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
解题代码
解题思路
解题效率