Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

两个数组的交集II #32

Open
Aras-ax opened this issue Apr 17, 2019 · 0 comments
Open

两个数组的交集II #32

Aras-ax opened this issue Apr 17, 2019 · 0 comments

Comments

@Aras-ax
Copy link
Owner

Aras-ax commented Apr 17, 2019

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

示例 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 小很多,哪种方法更优?

解答

function intersection(nums1, nums2) {
    let res = [],
        hasMap = {},
        count = 0;
    if (nums1.length > nums2.length) {
        let temp = nums1;
        nums1 = nums2;
        nums2 = temp;
    }

    count = nums1.length;
    nums1.forEach(num => {
        if (hasMap[num]) {
            hasMap[num]++;
        } else {
            hasMap[num] = 1;
        }
    });

    for (let i = 0, l = nums2.length; i < l; i++) {
        let cur = nums2[i];
        if (hasMap[cur] > 0) {
            res.push(cur);
            count--;
            hasMap[cur]--;
        }

        if (count <= 0) {
            break;
        }
    }

    return res;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant