350. 两个数组的交集 II(LeetCode)

题目描述


给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]

输出:[2,2]

说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。

我们可以不考虑输出结果的顺序。

条件分析


  1. 需要记录元素出现的次数;

解题思路(查找表)


  1. 可以定义一个Map用来存储nums1中元素及元素出现的次数;
  2. 遍历nums2,如果nums2中的元素存在map中且次数大于0,则该元素在交集中,同时map中元素出现的次数--;

编码如下

public int[] intersect(int[] nums1, int[] nums2) {
    Map<Integer, Integer> map = new HashMap<>();
    Integer value = null;
    for (int i : nums1) {
        value = map.get(i);
        if (value == null) {
            map.put(i, 1);
        } else {
            map.put(i, ++value);
        }
    }
    List<Integer> results = new ArrayList<>();
    for(int j : nums2) {
        value = map.get(j);
        if (value != null && value > 0) {
            map.put(j, --value);
            results.add(j);
        }
    }
    int[] re = new int[results.size()];
    int k=0;
    for (Integer m : results) {
        re[k++] = m;
    }
    return re;
}
posted @ 2021-07-14 19:33  咸与维新  阅读(30)  评论(0)    收藏  举报