给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]这个II 与I 不同在: 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
to是不包括的
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
/**
把短的那个放到哈希表里面
在遍历长的那个数组, 如果在哈希表里面有,放到结果数组里面,让他的次数-- ,更新map
*/
HashMap<Integer,Integer> map=new HashMap();
if(nums1.length>nums2.length){
return intersect(nums2,nums1);
}
//遍历短的数组 放到哈希表里面
for(int i=0;i<nums1.length;i++){
map.put(nums1[i],map.getOrDefault(nums1[i],0)+1);
}
int res[] =new int [nums1.length];
//遍历长数组
int index=0;//记录结果集数组的当前元素所在下标
for(int i: nums2){
//如果在哈希表里面有,放到结果数组里面,让他的次数-- ,更新map
if(map.containsKey(i)){
res[index++]=i;
int count=map.get(i)-1;
if(count>0){
map.put(i,count);
}else{
map.remove(i);
}
}
}
//结果都在res里面,但是res里面可能会有空的位置
int [] ans=Arrays.copyOfRange(res,0,index);
return ans;
}
}