LeetCode 350. 两个数组的交集 II

本文介绍了一种使用哈希映射和链表的数据结构解决数组交集问题的方法,通过遍历两个数组并比较元素,实现了计算两个数组交集的功能。

题目描述

给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序

解题思路

利用hashmap先遍历第一个数组,将第一个数组各元素的值和出现的次数存在hashmap中,在遍历第二个数组,当第二个数组的元素在map中并且值大于0时,将此数添加到linkedlist中(使用linkedlist是因为我们并不知道交集有多少个元素,如果事先分配定长也许会浪费空间,而且我们最后要返回的是一个数组,不可能这样分配一个过长的数组存储),最后再将;linkedlist转为int数组就可以啦

代码实现

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
        for(int i:nums1){
            if (map.containsKey(i))map.put(i,map.get(i)+1);
            else map.put(i,1);
        }
        LinkedList<Integer> list=new LinkedList<Integer>();
        for(int j :nums2){
            if(map.containsKey(j) && map.get(j)>0){
                list.add(j);
                map.put(j,map.get(j)-1);
            }
        }        
        int[] nums= new int[list.size()];
        for(int i=0;i<nums.length ;i++)
            nums[i]=list.poll();
        return nums;  
    }
}

执行用时 :
8 ms, 在所有 Java 提交中击败了62.50%的用户
内存消耗 :
37.1 MB, 在所有 Java 提交中击败了36.82%的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值