Leet 350:两个数组的交集II

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

示例 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.设置两个Map,先将num1中全部元素存入map中;

2.遍历num2中元素,若存在于map中,则对应键值减一,且res中对应键值加1。

3.将res转化为数组。

public static int[] intersect(int[] nums1, int[] nums2) {
        Map map=new HashMap<>();
        Map res=new HashMap<>();
        for(int i:nums1){
            map.put(i,map.getOrDefault(i,0)+1);
        }
        for(int j:nums2){
            if(map.containsKey(j)){
                res.put(j,res.getOrDefault(j,0)+1);
                map.put(j,map.get(j)-1);
                if(map.get(j)==0){
                    map.remove(j);
                }
            }
        }

        //将res转换为数组
        //计算数组长度
        int len=0;
        for(int i:res.keySet()){
            len=len+res.get(i);
        }
        int[] result=new int[len];
        int count=0;
        for(int i:res.keySet()){
            for(int j=0;j

你可能感兴趣的:(数据结构,算法)