两个数组的交集 II
给定两个数组,写一个方法来计算它们的交集。
例如:
给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].
注意:
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
- 我们可以不考虑输出结果的顺序。
分析
和前面 存在重复 一题有些类似,依旧要记录数字及其对应的出现次数,不过这一题我们需要对这两个数组都遍历一遍,先在容器记录nums1中出现的数字及其次数,再遍历查询容器中是否存在nums2中的数字,好在这一次不需要再末尾遍历输出,也就是说我们只需要一个基础的 键值对 容器即可
代码
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
//用来暂存结果,保存数组的长度以及各元素的值
List<Integer> tmp = new ArrayList<>();
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
//保存nums1中元素的个数
for(int i = 0 ;i<nums1.length;i++){
Integer temp = map.get(nums1[i]);
map.put(nums1[i],(temp == null? 0:temp)+1);
}
//遍历nums2,查询
for(int i=0;i<nums2.length;i++){
if(map.containsKey(nums2[i])&&map.get(nums2[i])!=0){
//存在该元素,且次数>0,则次数-1
tmp.add(nums2[i]);
map.put(nums2[i],map.get(nums2[i])-1);
}
}
int[] result = new int[tmp.size()];
int i = 0;
for(Integer in : tmp){
result[i++] = in;
}
return result;
}
}