问题描述
给定两个数组,编写一个函数来计算它们的交集。
示例
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。
思路
用一个HashMap对值出现过的次数进行计数。然后再遍历一遍nums2判定是否是交集即可。即nums1负责加,nums2符合条件负责减。 把剪掉的放进结果集。
方法一
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
int[] res = new int[nums1.length>nums2.length?nums1.length:nums2.length];
HashMap<Integer,Integer> hashMap = new HashMap<>();
for(int n:nums1){
if(hashMap.containsKey(n)){
hashMap.replace(n,hashMap.get(n)+1);
}else{
hashMap.put(n,1);
}
}
int i = 0;
for(int n:nums2){
if(hashMap.containsKey(n) && hashMap.get(n) > 0){
res[i++] = n;
hashMap.replace(n,hashMap.get(n)-1);
}
}
return Arrays.copyOfRange(res,0,i);
}
}