题目链接
解题思路
- 使用哈希表存储每个数字出现的次数,为了方便,我们先确定短数组
- 遍历短数组,并在哈希表中记录其每个数字和对应出现的次数
- 然后遍历长数组,对于长数组中的每个数字,如果在哈希表中存在这个数字,则将这个数字添加到答案中,并将对应出现次数减一
AC代码
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
if (nums1.length > nums2.length) {
return intersect(nums2, nums1);
}
Map<Integer, Integer> map1 = new HashMap<>();
for (int i : nums1) {
int count = map1.getOrDefault(i, 0) + 1;
map1.put(i, count);
}
int[] ans = new int[nums1.length];
int index = 0;
for (int i : nums2) {
int count = map1.getOrDefault(i, 0);
if (count > 0) {
ans[index++] = i;
count--;
if (count > 0) {
map1.put(i, count);
} else {
map1.remove(i);
}
}
}
return Arrays.copyOfRange(ans, 0, index);
}
}