给定两个数组,写一个方法来计算它们的交集。
例如:
给定 nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, 返回 [2, 2]
.
注意:
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
- 我们可以不考虑输出结果的顺序。
思路:将数组1中的元素作为哈希表的key,元素出现次数作为value构建一张哈希表。遍历数组2,若数组2中的元素在哈希表中作为key存在,而且value>0,保存该元素值,哈希表的value值减一,若value=0时,移除该键值对。
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
for(Integer i:nums1) {
if(map.containsKey(i)) {
map.put(i,map.get(i)+1);
}else {
map.put(i, 1);
}
}
int j=0;
for(Integer i:nums2) {
if(map.containsKey(i)) {
nums1[j++]=i;
map.put(i, map.get(i)-1);
if(map.get(i)==0) {
map.remove(i);
}
}
}
return Arrays.copyOfRange(nums1, 0, j);
}
}