2025年--Lc231-350. 两个数组的交集 II-Java版

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;
    
}
}
相关推荐
happy_baymax1 分钟前
三电平矢量表达式MATLAB实现
开发语言·matlab
xyq20242 分钟前
jEasyUI 创建 XP 风格左侧面板
开发语言
赫瑞3 分钟前
Java中的最长公共子序列——LCS
java·开发语言
于先生吖6 分钟前
零基础开发国际版同城出行平台 JAVA 顺风车预约系统实战教学
java·开发语言
代码雕刻家7 分钟前
2.22.StringBuffer类的常见用法、
java·开发语言
yhole8 分钟前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
明月(Alioo)23 分钟前
Python 并发编程详解 - Java 开发者视角
java·开发语言·python
JAVA+C语言34 分钟前
C++ STL map 系列全方位解析
开发语言·c++
福赖35 分钟前
《C#反射机制》
开发语言·c#
0xDevNull38 分钟前
基于Java的小程序地理围栏实现原理
java·小程序