350:两个数组的交集II

问题描述

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

示例

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

说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。

思路

用一个HashMap对值出现过的次数进行计数。然后再遍历一遍nums2判定是否是交集即可。即nums1负责加,nums2符合条件负责减。 把剪掉的放进结果集。

方法一

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        int[] res = new int[nums1.length>nums2.length?nums1.length:nums2.length];
        HashMap<Integer,Integer> hashMap = new HashMap<>();
        for(int n:nums1){
            if(hashMap.containsKey(n)){
                hashMap.replace(n,hashMap.get(n)+1);
            }else{
                hashMap.put(n,1);
            }
        }
        int i = 0;
        for(int n:nums2){
            if(hashMap.containsKey(n) && hashMap.get(n) > 0){
                res[i++] = n;
                hashMap.replace(n,hashMap.get(n)-1);
            }
        }
        return Arrays.copyOfRange(res,0,i);
    }
}

发布了396 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/104910200