leetcode-数组-350-两个数组的交集 II

100 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情

Hi, 大家好。我是新人,程序员库里。

今后会按类分享算法题。

今天给大家分享第16道leetcode上数组中使用双指针相关的算法题。

350.两个数组的交集 II

leetcode地址:leetcode-cn.com/problems/in…

难度

简单

描述

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

示例1

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

示例2

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

提示:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

解法1

1.属于查找表的算法。如果题目要求和次数相关,需要使用Map

2.定义变量res,来存储最后两个数组的交集

3.定义变量hash,来存储数组中的字符和出现的次数

4.开始遍历nums1,如果当hash中有当前遍历的值,就将当前值的次数加1。如果没有当前遍历的值,表示当前的值只有一个,设置当前值出现的次数是1

5.开始遍历nums2,如果当hash中有当前遍历的值,表示当前的值是两个数组的交集,就把当前的值添加到res中,同时将has中当前的值,次数减1

6.最后res中存储的是两个数组的交集,返回res即可。

代码

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function(nums1, nums2) {
    let set1 = new Set(nums1);
    let set2 = new Set(nums2);

    let res = [];
    for(let key of set1.keys()){
        if(set2.has(key)){
            res.push(key)
        }
    }
    return res;
};