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;
    
}
}
相关推荐
shehuiyuelaiyuehao19 分钟前
算法29,前缀和,除自身以外的数组的乘积
java·数据结构·算法
小刘在重生~34 分钟前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python
随遇而安zx37 分钟前
【多线程】---JMM 与 volatile 深度解析
java·多线程
YYYing.43 分钟前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
邪修king1 小时前
Re:Linux系统篇(十九):进程篇(八): 进程等待详解:wait/waitpid,僵尸进程到底该如何回收
java·开发语言
啵啵啵鱼1 小时前
DS-顺序表
java·数据结构·笔记·后端·链表·obsidian
我爱写代码i1 小时前
SKAPP SK影视反编译详细教程+源码 含苹果端ipa
开发语言·javascript·ecmascript
TinyMemory1 小时前
Java 面向对象核心入门(七):方法重载 Overload,同一个方法名能干不一样的活
java·面向对象·overload·方法重载
吴声子夜歌2 小时前
Java扩展——OkHttp
java·开发语言·okhttp