解题思路
map
记录每一个元素出现的次数,使用map来记录nums1每一个元素出现的次数,之后将nums2中的元素与map进行比较
public int[] intersect(int[] nums1, int[] nums2) {
//map用来保存nums1中每个元素出现的次数
Map<Integer,Integer> map = new HashMap<>();
for(int i:nums1){
//先获取map中的值 如果没有设为0
int time = map.getOrDefault(i,0);
//累加放回map
map.put(i,time+1);
}
//记录交集的个数
int index = 0;
for(int i:nums2){
//如果map中包含该元素并且出现次数大于等于1 记录下来
if(map.containsKey(i)&&map.get(i)>=1){
//使用nums1数组保存交集
nums1[index++] = i;
//说明已经被用掉了一个 需要减1
map.put(i,map.get(i)-1);
}
}
//返回nums1的一个copy
return Arrays.copyOfRange(nums1, 0,index);
}