Leetcode #350 兩個數組的交集II

題目敘述:

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

示例 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 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

解法:

先找出兩個陣列哪一個較長及較短,minArr[i]如果可以在maxArr中找到值,表示這是交集的數字,將這數字放入回傳陣列,移除maxArr中第一個交集數字。

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function(nums1, nums2) {
    var minArr = (nums1.length > nums2.length) ? nums2 : nums1;
    var maxArr = (nums1.length > nums2.length) ? nums1 : nums2;
    var number = [];

    for (var i = 0; i < minArr.length; i++) {
        if (maxArr.indexOf(minArr[i]) > -1) {
            maxArr[maxArr.indexOf(minArr[i])] = null;
            number.push(minArr[i]);
        }
    }
    
    return number;
    
};

題目連結:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/description/

Digiprove sealCopyright secured by Digiprove © 2018
Tags :

發表迴響