两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
/**
* 两个数组的交集 II:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致
* 使用Map集合:允许出现相同的元素
* @param nums1
* @param nums2
* @return
*/
public int[] intersect(int[] nums1, int[] nums2) {
Map<Integer,Integer> record = new HashMap<>();
//遍历nums1,key存放元素值,value存放元素出现的次数
for(int i=0;i<nums1.length;i++){
if(record.containsKey(nums1[i])){
//map中包括nums[i]
//当存在这个key的时候,会覆盖掉原来的value并返回oldvalue,也就是旧值。
record.put(nums1[i],record.get(nums1[i])+1);
}else{
record.put(nums1[i],1);
}
}
//遍历nums2,如果找到对用元素&&对应HashMap中的value不为0,则添加这个元素到list中,
// 同时,HashMap中的value值减一,表示已经找到一个相同的了
ArrayList<Integer> resultList = new ArrayList<>();
for(int i = 0;i<nums2.length;i++){
if(record.containsKey(nums2[i]) && record.get(nums2[i])>0){
resultList.add(nums2[i]);
//修改record中的value值
record.put(nums2[i],record.get(nums2[i])-1);
}
}
//将list中的值放入数组中
int[] res = new int[resultList.size()];
for(int i =0;i<resultList.size();i++){
res[i] = resultList.get(i);
}
return res;
}