其他分享
首页 > 其他分享> > Leetcode 350:Intersection of Two Arrays II

Leetcode 350:Intersection of Two Arrays II

作者:互联网

Leetcode 350:Intersection of Two Arrays II

Given two arrays, write a function to compute their intersection.

说人话:

求两个数组的交集。

举例1:

image-20210126100314908

举例2:

image-20210126100330274

[法1] Map 记录频次

思路

因为是求交集,所以元素出现的次数是需要进行考虑了。这里笔者考虑到用 Map 这个集合框架来解决这个问题,主要是基于 key-value 的特性。使用 Map 可以记录每个元素出现的频次,然后得出交集。

思路如下:

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

        //记录 nums1 中的元素及其频次
        Map<Integer,Integer> numCount = new HashMap<>();

        for (int i = 0; i < nums1.length; i++) {
            Integer integer = numCount.get(nums1[i]);
            if (integer == null){
                numCount.put(nums1[i],1);
            }else{
                Integer count = numCount.get(nums1[i]);
                numCount.put(nums1[i],++count);
            }
        }

        //临时数组,长度为 nums1 和 nums2 中短的那个
        int[] result = new int[nums1.length<nums2.length?nums1.length:nums2.length];
        //记录交集中的元素个数
        int count = 0;

        //判断 nums2 中每个元素在 nums1 是否存在
        for (int num: nums2){
            Integer i = numCount.get(num);
            if (i != null && i > 0) {
                //存在的话放到临时数组中
                result[count++]=num;
                //然后消耗一个频次
                numCount.put(num,--i);
            }
        }
        
        //复制数组
        int[] r = new int[count];
        for (int i = 0; i < r.length; i++) {
            r[i] = result[i];
        }

        return r;

    }
}
提交结果
image-20210126133033579
代码分析

不考虑集合框架底层原理的话:

标签:频次,Map,Arrays,Two,numCount,II,int,数组,nums1
来源: https://blog.51cto.com/u_15298624/3035444