Map两个数组的交集包括重复的部分

题目:

350.两个数组的交集2

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

力扣题目链接:力扣

基础:

创建map集合:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

map集合函数:

获得对应key值的value-----map.getOrDefault(key, 0)-要是key值为空,则count默认值为0

map添加元素 ----- map.put(key,value);

map删除元素------ map.remove(key)

数组转换:

Arrays.copyOfRange(arr, 0, index),将数组转为长度为index,长度的数组,从索引0开始。

思路:

图解-https://assets.leetcode-cn.com/solution-static/350/350_fig1.gif

1)选择长度最短的数组(减少内存使用),使用map记录。key记录数组出现的字符,value记录该key值出现的次数。

2)遍历长的数组,每次遍历检查map中是否有key,

        有key,且value值不为0。value值,减减(表示此数值已完成了求交集),将此值加入交集数组list。value值为0,继续遍历

        无key,继续遍历。

3)返回交集数组

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
       //选取数组最短的加入map中,选取长度最短的数组
       //调整函数的输入变量的顺序
       if(nums1.length>nums2.length){
           return intersect(nums2,nums1);
       }
        //将第一可变形参遍历加入map
        Map<Integer,Integer> map = new HashMap();
        for(int i :nums1){
            int value = map.getOrDefault(i,0)+1;
            map.put(i,value);

        }
        //遍历第二个数组,将重复的值加入新数组中
        int[] res = new int[nums1.length];
        int index =0;
        for(int i : nums2){
            //不知道map有没有这个函数
            // if(map.contains(i) && map.get(i)>0){
            //     int value = map.getOrDefault(i);
            //     value--;
            //     list1.add(i);
            // }

            int value = map.getOrDefault(i,0);
            if(value>0){
                value--;
                res[index++]=i;
                if(value>0){
                    map.put(i,value);
                }else{
                    map.remove(i);
                }
            }

        }
        //复制数组,大于0,转为新的数组
        return Arrays.copyOfRange(res, 0, index);

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 JavaScript 中的 filter 和 includes 方法来查找两个数组交集和补集。具体实现如下: ```javascript const arr1 = [1, 2, 3, 4, 5]; const arr2 = [3, 4, 5, 6, 7]; // 查找交集 const intersection = arr1.filter(item => arr2.includes(item)); console.log(intersection); // [3, 4, 5] // 查找补集 const difference = arr1.filter(item => !arr2.includes(item)); console.log(difference); // [1, 2] ``` 以上代码中,我们首先定义了两个数组 arr1 和 arr2,然后使用 filter 方法和 includes 方法来查找它们的交集和补集。其中,filter 方法用于过滤数组中的元素,includes 方法用于判断一个数组是否包含某个元素。最终,我们将交集和补集分别输出到控制台。 ### 回答2: 为了查找两个数组交集的补集,我们可以使用JavaScript中的filter()和includes()方法。 首先,我们假设有两个数组array1和array2。我们可以使用filter()方法遍历array1并检查每个元素是否存在于array2中。如果元素不存在于array2中,则它属于交集的补集。我们可以将这些元素存储在一个新的数组中。 下面是使用JavaScript实现的代码示例: ```javascript let array1 = [1, 2, 3, 4, 5]; let array2 = [4, 5, 6, 7, 8]; let complement = array1.filter(item => !array2.includes(item)); console.log(complement); ``` 在上述代码中,我们定义了array1和array2两个数组,然后使用filter()方法遍历array1。对于每个元素,我们使用includes()方法检查它是否存在于array2中。当元素不在array2中时,我们将其添加到complement数组中。 最后,我们打印出complement数组,这就是两个数组交集的补集。 使用上述代码示例,输出结果为[1, 2, 3],这表示交集的补集为1、2、3。 ### 回答3: 要找到两个数组交集的补集,我们首先需要找到两个数组交集,然后再找到这个交集在原始数组中的补集。 要找到两个数组交集,可以使用JS中的filter方法。首先,我们可以遍历其中一个数组,对于每一个元素,我们可以使用includes方法来判断另一个数组中是否包含这个元素,如果包含,则将其添加到结果数组中。 接下来,我们需要找到交集在原始数组中的补集。我们可以使用map方法遍历原始数组,并使用includes方法来判断交集数组中是否包含当前元素,如果不包含,那么就将其添加到补集数组中。 最后,我们可以返回补集数组作为结果。 下面是一段示例代码来解决这个问题: ```javascript function findComplement(arr1, arr2) { // 找到交集 const intersection = arr1.filter(element => arr2.includes(element)); // 找到交集的补集 const complement = arr1.map(element => { if (!intersection.includes(element)) { return element; } }).filter(element => element !== undefined); return complement; } // 使用示例 const arr1 = [1, 2, 3, 4]; const arr2 = [3, 4, 5, 6]; const result = findComplement(arr1, arr2); console.log(result); // 输出 [1, 2] ``` 在这个示例中,我们先找到了两个数组交集 [3, 4],然后找到了交集在原始数组中的补集 [1, 2]。最后将补集返回作为结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值