给定两个数组,写一个方法来计算它们的交集。
例如:
给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].
注意:
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
我们可以不考虑输出结果的顺序。
分析:用一个哈希表将第一个数组的元素当做键,出现次数当做值传进去,遍历第二个数组时,如果有相同元素,num>0,就会将值传入结果数组,并减一次num
public int[] intersect(int[] nums1, int[] nums2) {
int num = 0;
List<Integer> li = new ArrayList();
//这个哈希表,键是数,值是出现的次数
HashMap<Integer,Integer> map = new HashMap<>();
for(int i :nums1){
num= map.get(i)!=null?map.get(i):0;
map.put(i,num+1);
}
//遍历第二个数组
for(int i :nums2){
num= map.get(i)!=null?map.get(i):0;
if(num>0){
li.add(i);
map.put(i,num-1);
}
}
int[] result = new int[li.size()];
for(int i=0;i<li.size();i++){
result[i]=li.get(i);
}
return result;
}