解题思路
将nums1存入到一个HashMap里面,键是数组里的元素,值是该元素出现的次数
接下来遍历nums2,依次到Map里面去查找,看是否有出现,如果出现了,就
放到结果数组中,然后出现次数(值)减一,直到为0
这种思路的前提是nums1比nums2长,所以nums2更长时,要交换数组。
代码如下:
public class test {
public int[] intersect(int[] nums1, int[] nums2) {
if (nums1.length > nums2.length) {
return intersect(nums2, nums1);
}
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int num : nums1) {
int count = map.getOrDefault(num, 0) + 1;
map.put(num, count);
}
int[] intersection = new int[nums1.length];
int index = 0;
for (int num : nums2) {
int count = map.getOrDefault(num, 0);
if (count > 0) {
intersection[index++] = num;
count--;
if (count > 0) {
map.put(num, count);
} else {
map.remove(num);
}
}
}
return Arrays.copyOfRange(intersection, 0, index);
}
}