1.题目

2.思路

3.代码实现
java
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
// 统计频率:用哈希表记录 nums1 中每个元素的出现次数。
// 动态匹配:遍历 nums2,若元素在哈希表中且剩余次数 > 0,则加入结果,并减少哈希表中的计数。
// 优化空间:为了节省内存,选择较短的数组作为哈希表的统计对象
if(nums1.length>nums2.length)
{
// 保证 nums1 是较短的数组,减少哈希表空间
return intersect(nums2,nums1);
}
HashMap<Integer,Integer> ma=new HashMap<>();
//统计nums1中元素的频率
for(int num:nums1)
{//ma存放元素和元素出现的次数
ma.put(num,ma.getOrDefault(num,0)+1);
}
List<Integer> res=new ArrayList<>();
// 遍历 nums2,动态匹配并减少计数
for(int num:nums2)
{
int cnt=ma.getOrDefault(num,0);
if(cnt>0)
{
res.add(num);
ma.put(num,cnt-1);
}
}
//转换成数组
int[] ans=new int[res.size()];
for(int i=0;i<ans.length;i++)
{
ans[i]=res.get(i);
}
return ans;
}
}