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 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  咸与维新  阅读(38)  评论(0)    收藏  举报