Leetcode-350-两个数组的交集Ⅱ

题目

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

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。

哈希表

遍历较短的数组, 使用哈希表来存储每一个元素出现的次数.

然后遍历另外一个数组, 查看元素是否在哈希表中. 如果在, 则将其 添加到结果数组中, 并且更新哈希表中的值.

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
if (nums1.length > nums2.length) {
int[] tmp = nums1;
nums1 = nums2;
nums2 = tmp;
}
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int num : nums1) {
int cnt = hashMap.getOrDefault(num, 0) + 1;
hashMap.put(num, cnt);
}
int[] res = new int[nums1.length];
int len = 0;
for (int num : nums2) {
int cnt = hashMap.getOrDefault(num, 0);
if (cnt > 0) {
res[len++] = num;
cnt--;
if (cnt > 0) {
hashMap.put(num, cnt);
} else {
hashMap.remove(num);
}
}
}
return Arrays.copyOfRange(res, 0, len);
}
}

image-20200713101027073