给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
解题思路:
1.定义map集合存储num1中值并且计数
2.遍历num2并且判断是否含有map集合的值,并且判断数要大于0.有的话,那么就map集合计数减去一
3.把交集放到集合中,然后定义数组,遍历链表转成数组。
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
//计数器,key为数组中的数字,value为该数字在数组中出现的次数
Map<Integer, Integer> counter = new HashMap<>();
//存储到map集合中,并且记录次数
for (int i = 0; i < nums1.length; i++) {
//取出数来。
int num = nums1[i];
//计数
if (counter.containsKey(num)) {
counter.put(num, counter.get(num) + 1);
} else {
counter.put(num, 1);
}
}
//定义一个链表
List<Integer> tempList = new ArrayList<>();
for (int i = 0; i < nums2.length; i++) {
int num = nums2[i];
//遍历数组2,并且如果存在,并且减去计数,把他存到链表。
if (counter.containsKey(num) && counter.get(num) > 0) {
counter.put(num, counter.get(num) - 1); //计数器中记录该数字的次数减1
tempList.add(num); //将该数字添加到list中
}
}
//定义一个数组。
int[] result = new int[tempList.size()];
//为满足题目返回值类型,将list转换为int数组
for (int i = 0; i < result.length; i++) {
result[i] = tempList.get(i);
}
return result;
}
}