题目:给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
示例 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 <= nums1.length, nums2.length <= 1000
- 0 <= nums1[i], nums2[i] <= 1000
题目来源:力扣(LeetCode)链接
题解:
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
//map1和map2用来存放两个数组中的元素和对应的个数
Map<Integer, Integer> map1 = new HashMap<>();
Map<Integer, Integer> map2 = new HashMap<>();
for (int i = 0; i < nums1.length; i++) {
map1.put(nums1[i], map1.getOrDefault(nums1[i], 0) + 1);
}
for (int i = 0; i < nums2.length; i++) {
map2.put(nums2[i], map2.getOrDefault(nums2[i], 0) + 1);
}
//取出数组num1中的所有元素
Set<Integer> keys = map1.keySet();
//存放交集中的元素
List<Integer> list = new ArrayList<>();
for (Integer key : keys) {
int count = 0;
//判断是否存在交集,如果存在考虑取出现次数较小的
if (map2.containsKey(key)) {
count = Math.min(map1.get(key), map2.get(key));
}
//存放交集中的所有元素
for (int i = 0; i < count; i++) {
list.add(key);
}
}
//把结果存放到数组返回
int[] res = new int[list.size()];
int j = 0;
for (Integer i : list) {
res[j++] = i;
}
return res;
}
}