力扣:两个数组的交集 II

该文介绍了如何利用HashMap解决力扣上的一道问题——找到两个数组的交集。首先,用HashMap存储较短数组中每个数值及其出现次数,然后遍历较长数组,检查数值是否在HashMap中出现并更新交集结果。最后返回交集数组。
摘要由CSDN通过智能技术生成
    • 力扣链接

两个数组的交集II

    • 题目

    • 解题思路

官方思路

这题最好是用HashMap,因为HashMap<Object,Object>第一个属性可以存数组的值,第二个属性用来记录该值出现的次数。

①用HashMap<Integer,Integer>存储nums1中每个数值出现的次数;

②遍历nums2,用①的map获取nums2中出现的数值的次数count,如果count>0,说明nums1中该数值出现过,那就这个数值赋值给交集数组inter[],然后count--,再把该count送回map中。

③最后返回inter数组。

    • 代码

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        // 挑选出两个数组找个短的那个。这一段可省略。
        if (nums1.length > nums2.length) {
            return intersect(nums2, nums1);
        }

        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        // nums1 = [4,9,5], nums2 = [9,4,9,8,4]
        for (int num : nums1) {
            // map.getOrDefault : 存在这个数就返回,不存在就返回默认值
            int count = map.getOrDefault(num, 0) + 1;
            map.put(num, count);
        }
        // 开辟一块内存空间用来存放两个数组的交集
        int[] intersection = new int[nums1.length];
        int index = 0;
        for (int num : nums2) {
            // num1中不存在这个数就在map中添加num=0
            int count = map.getOrDefault(num, 0);
            // 存在这个数就往后执行
            if (count > 0) {
                // 把这个数填充到数组中
                intersection[index++] = num;
                // 计数减一
                count--;
                // 如果还大于0,如果不考虑内存的话,这一段if、else可以省略。
                if (count > 0) {
                    // 再次添加进去,覆盖之前那个key
                    map.put(num, count);
                } else {
                    // 不大于0移除这个数
                    map.remove(num);
                }
            }
        }
        // public static int[] copyOfRange(int[] original, int from, int to)
        // 对已有([9, 4, 0])的数组进行截取和赋值,结果为[9,4]
        return Arrays.copyOfRange(intersection, 0, index);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值