每日一题算法:2020年7月13日 [两个数组的交集 II] intersect

2020年7月13日 两个数组的交集 II intersect

每日一题算法:2020年7月13日 [两个数组的交集 II] intersect_第1张图片

默认格式:

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {

    }
}

解题思路:

使用哈希Map来存储一个数组,键为数组中的值,值为出现的次数。

然后遍历另外一个数组,如果在哈希表中存在,那么就加入结果集中,并且哈希表中的值-1,如果等于0就在哈希表中删除,如果不存在则不加入结果交集中。

代码部分:
每日一题算法:2020年7月13日 [两个数组的交集 II] intersect_第2张图片

    public int[] intersect(int[] nums1, int[] nums2) {

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

        //创建一个字典
        for (int i=0;i<nums1.length;i++){
            Integer integer = map.get(nums1[i]);
            if (integer==null)
            {
                map.put(nums1[i],1 );
            }else
                map.put(nums1[i],integer+1 );
        }

        int len=0;
        for (int i=0;i<nums2.length;i++)
        {
            Integer integer = map.get(nums2[i]);
            if (integer!=null)
            {
                if (integer-1==0)
                    map.remove(nums2[i]);
                else {
                    map.put(nums2[i],integer-1 );
                }
                nums2[len]=nums2[i];
                len++;
            }


        }

        int[] res=new int[len];

        System.arraycopy(nums2, 0,res , 0,len );
        return res;
    }

进阶问题。
在这里插入图片描述

如果已经排好序了,对我并没有影响,也没有优化的方式。

如果nums1比nums2小很多:

因为我这里默认使用了nums1作为字典hashmap而实际上作为hashmap的那个应该越小越好,因为构建哈希表比遍历数组消耗更大。

如果nums2的元素存在磁盘上:

对我没有影响,只要nums1的哈希表存在,我可以一个一个去读取nums2的值来做判断。

你可能感兴趣的:(每日一题算法)