LeetCode算法题-Intersection of Two Arrays II(Java实现)

Leetcode——Sort算法题 Easy 350. Intersection of Two Arrays II Given two arrays, write a function to compute their intersection. 正确版本: import java.util.ArrayList; import java.util.HashMap; public class Solution { publ... 阅读详情

这是悦乐书的第208次更新,第220篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第76题(顺位题号是350)。给定两个数组,编写一个函数来计算它们的交集。例如:

输入:nums1 = [1,2,2,1],nums2 = [2,2]
输出:[2,2]

输入:nums1 = [4,9,5],nums2 = [9,4,9,8,4]
输出:[4,9]

注意:

  • 结果中的每个元素应该出现在两个数组中显示的次数。

  • 结果可以是任何顺序。

跟进:

  • 如果给定的数组已经排序怎么办? 你会如何优化你的算法?

  • 如果nums1的尺寸与nums2的尺寸相比较小怎么办? 哪种算法更好?

  • 如果nums2的元素存储在磁盘上,并且内存有限,以致您无法一次将所有元素加载到内存中,该怎么办?

02 第一种解法

今天这题是昨天题目的升级版,唯一的区别就是最后输出的结果数组中,元素并不唯一。对此,只需要将昨天的HashSet换成ArrayList即可,双指针的思路还是一样。

先将两数组排序,然后使用双指针,依次判断两数组中的元素是否相等,如果某个元素大于或小于另外一个元素,则将指针向后移动,如果相等,则将元素放入ArrayList中,然后将ArrayList中的元素迭代放入数组,最后返回。

因为使用Arrays类的sort方法,所以时间复杂度是O(n log(n)),空间复杂度是O(n)。

public int[] intersect(int[] nums1, int[] nums2) {
    List<Integer> list = new ArrayList<Integer>();
    Arrays.sort(nums1);
    Arrays.sort(nums2);
    int i = 0;
    int j = 0;
    while (i < nums1.length && j < nums2.length) {
        if (nums1[i] < nums2[j]) {
            i++;
        } else if (nums1[i] > nums2[j]) {
            j++;
        } else {
            list.add(nums1[i]);
            i++;
            j++;
        }
    }
    int[] result = new int[list.size()];
    int k = 0;
    for (Integer num : list) {
        result[k++] = num;
    }
    return result;
}

03 第二种解法

利用HashMap,先将其中一个数组的元素全部存入其中,key为元素值,value为该元素出现次数。然后遍历第二个数组,如果map中存在当前元素,并且在map中此元素所对应的value值大于0,就将其添加进ArrayList中,同时对该元素在map中所对应的value值减1,避免重复判断。

此解法因为用到了HashMap的contains方法,因此时间复杂度最好情况是O(n),最坏情况是O(n^2),空间复杂度是O(n)。

public int[] intersect2(int[] nums1, int[] nums2) {
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    for (int num : nums1) {
        map.put(num, map.getOrDefault(num, 0) + 1);
    }
    List<Integer> result = new ArrayList<Integer>();
    for (int num : nums2) {
        if (map.containsKey(num) && map.get(num) > 0) {
            result.add(num);
            map.put(num, map.get(num) - 1);
        }
    }
    int[] arr = new int[result.size()];
    for (int i = 0; i < result.size(); i++) {
        arr[i] = result.get(i);
    }
    return arr;
}

04 小结

对于第一点跟进,第一种解法就可以解决。第二点跟进,可以在第二种解法那里优化下,将长度较小的数组存入HashMap,然后迭代长度较大的数组来和HashMap中的元素比较。第三点跟进没思路,如果大家对于第三点跟进有什么想法或思路,欢迎下方留言交流讨论。

算法专题目前已连续日更超过两个月,算法题文章76+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

深入解析公网IP与内网IP:NAT技术原理与实战配置指南 IP地址是互联网通信的基础,它作为网络设备的唯一逻辑标识,负责数据包的寻址与路由,是实现端到端通信的核心。其工作原理基于互联网协议,通过源地址和目的地址的匹配,确保信息在全球网络中准确传递。理解IP地址的技术价值在于,它是构建稳定网络应用、实现服务互联互通的前提,尤其在云计算、微服务架构和物联网场景中至关重要。在实际应用中,开发者常面临内外网访问、服务部署和网络调试等挑战,这通常涉及公网IP与内网IP的区分以及NAT(网络地址转换)技术的运用。NAT作为连接私有网络与公共互联网的关键桥梁,通过端口映射和地址 阅读详情

相关推荐

(入门向)在Ubuntu22.04.3安装Matlab2021b,以及无法安装在当前目录下的解决办法(见最后)

还有这个/usr/local是只读状态,我试过sudo chmod..去改那个文件的读,结果还是安装不了,我不是这个默认路径,因为它文件夹还是只读,于是我在matlab2021b下创了一个bin,并选上。输入完成后,依次按y,因为里面有三个文件,他会让你确定3次密码,直接yyy跳过即可。你可能会遇到装不下的情况,这个软件占30g,可是你分配给虚拟机就剩10g。,于是我去Downloads下建了一个matlab2021b文件夹,果然好使,3).此时,会提示你输入密码,因为这个rar是有密码的,

harrype的博客 7293

LeetCode--No.350--Intersection of Two Arrays II

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2]. Note: Each element in the result should appear as ma

sophia_tone2w的博客 304

LabVIEW波形图表时间轴设置:三种方法实现横坐标显示日期时间

在数据采集与设备监控场景中,波形图表的横坐标默认显示采样点序号而非日期时间,这给工程师分析历史数据带来不便。理解时间标识(Timestamp)的本质——一个自1904年起算的双精度秒数,是解决问题的关键。时间轴设置既是显示格式问题,更是数据层与显示层的协同设计。通过属性节点动态生成刻度标签、将时间标识数组直接作为X轴数据、或使用波形数据(Waveform)类型绑定t0与dt,分别适用于固定点数显示、非等间隔事件记录和等间隔连续采样等不同需求。合理选择方案并注意缓冲区预分配与时间连续性处理,可让波形图表准确呈

weixin_33416697的博客 255

Leetcode 350. Intersection of Two Arrays II 数组交集2 解题报告

1 解题思想这道题和前两天的那个是一个系列的,只是那一个输出不能重复,而这一题重复了多少个,就输出多少个,所以先看下这个: Leetcode 349. Intersection of Two Arrays 解题报告 Python Java 做法,在Java上,就是把原来的HashSet转变成HashMap用来计数就可以了,剩下就很简单了2 原题Given two arrays, write a f

MebiuW的专栏 4642

第5.1节 构网控制:电压源特性与电压调节

摘要: 构网型变流器的核心物理本质是作为可控交流电压源,通过戴维南等效模型(受控电势源+低输出阻抗)自主建立并调节电压,增强电网电压刚度。其电压调节通过无功-电压闭环控制实现,内环为自动电压调节器(AVR),外环为无功-电压下垂特性,模拟同步发电机功能。关键技术包括自适应增益、虚拟阻抗补偿及动态限流策略,以应对弱电网稳定性、故障过流等问题。该设计满足《规范》对电压调节范围、动态无功支撑的要求,是高比例新能源电力系统电压稳定的关键解决方案。

技术工作者 1110

MATLAB实战:从零推导合成孔径雷达(SAR)后向投影(BP)算法核心公式与代码实现

本文详细介绍了如何使用MATLAB从零推导合成孔径雷达(SAR)后向投影(BP)算法的核心公式与代码实现。通过基础概念讲解、数学原理推导、距离维脉冲压缩实现及完整MATLAB代码展示,帮助读者掌握SAR成像的关键技术。特别针对BP算法的优化技巧和常见问题提供了实用解决方案,适合雷达信号处理领域的开发者和研究者参考。

weixin_28683689的博客 252

Java 数组的声明、创建和初始化、Arrays 类

声明数组变量 下面是声明数组变量的语法: dataType[] arrayRefVar; // 首选的方法 或 dataType arrayRefVar[]; // 效果相同,但不是首选方法 下面是这两种语法的代码示例: double[] myList; // 首选的方法 或 double myList[]; // 效果相同,但不是首选方法...

practical_sharp的博客 2226

K230目标识别数字提问:模型只能识别近距离的目标,稍远一点就无法正确检测...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1901

Java/350. Intersection of Two Arrays II 两个数组的交集 II

题目       代码部分一(4ms 85.80%) class Solution { public int[] intersect(int[] nums1, int[] nums2) { List&lt;Integer&gt; list = new ArrayList&lt;&gt;(); Map&lt;Integer, Integer...

qq_38959715的博客 864

【微服务】Java 对接飞书多维表格使用详解

Java 对接飞书多维表格使用详解

congge_study的博客 1万+

Opencv计算机视觉PPT-算法篇

01 02 03 04 05 06 07 08 09 010 011 012 013 014 015 016 017 018

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 207

LeetCode刷题:349. Intersection of Two Arrays&350. Intersection of Two Arrays II

LeetCode刷题:349. Intersection of Two Arrays&350. Intersection of Two Arrays II 原题链接: 349.Intersection of Two Arrayshttps://leetcode.com/problems/intersection-of-two-arrays/ 350.Intersection o...

梅森上校的博客 业精于勤荒于嬉,形成于思毁于随。 316

AF自动对焦 CDAF PDAF

前言 主流的AF: CDAF, PDAF, laser assist AF(这个只是辅助,在微距或者拍摄纹理不明显的场景下好用)。 1.cdaf原理 CDAF的大致原理就是检测图像锐度或者等价于锐度的参数,不断推动马达寻找最清晰点实现合焦或者对焦。如下图: 缺点:对焦准确,速度慢,由于camera帧率,cpu处理速度,马达反映时间问题不能实时对焦运动物体。 2.pdaf原理 计算相位差,将相位差转换为相位差和af code的关系....

camerall 1万+

Leetcode日练笔记11 #350 #167 Intersection of Two Arrays II & Two Sum II - Input array is sorted

#350 Intersection of Two Arrays II Given two integer arraysnums1andnums2, returnan array of their intersection. Each element in the result must appear as many times as it shows in both arrays and you may return the result inany order. 解题思路: 还是用回之...

Bittersweet_t的博客 1743

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Intersection of Two Arrays II

Intersection of Two Arrays II Description Given two arrays, write a function to compute their intersection. Note - Each element in the result should appear as many times as it shows in both arra...

mcrwayfun,欢迎你 168

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【LeetCode】350. Intersection of Two Arrays II 两个数组的交集 II(Easy)(JAVA)

【LeetCode】350. Intersection of Two Arrays II 两个数组的交集 II(Easy)(JAVA) 题目地址: https://leetcode.com/problems/intersection-of-two-arrays-ii/ 题目描述: Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2

qq_16927853的博客 212

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LeetCode 350. Intersection of Two Arrays II

欢迎访问原文所在博客:https://52heartz.top/articles/leetcode-350-intersection-of-two-arrays-ii/ 解答1[Java]: public class Solution { public int[] intersect(int[] nums1, int[] nums2) { HashMap<Intege...

user2639的博客 156

算法系列——两个数组的交集II(Intersection of Two Arrays II)

题目描述 Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2]. Note: Each element in the result should appear

BridgeGeorge 631

leetcode (Intersection of Two Arrays II)

Title: Intersection of Two Arrays II    350 Difficulty:Easy 原题leetcode地址:   https://leetcode.com/problems/intersection-of-two-arrays-ii/   1.  见代码注释 时间复杂度:O(n),三次一层for循环。 空间复杂度:O(n),申请map和链表list...

hsx1612727380的专栏 239

LeetCode笔记:350. Intersection of Two Arrays II

找出两个数组中相同的数字(出现几次保留几次)

Minecraft 1889

[Leetcode] 350. Intersection of Two Arrays II

Problems: https://leetcode.com/problems/intersection-of-two-arrays-ii/ Solution1: Using map 只需要存储nums1的map 对于输出,不需要另外创建数组,而是直接重写nums1 class Solution { public int[] intersect(int[] nums1, int[] n...

Renoler的博客 95

LeetCode:Intersection of Two Arrays II

  Intersection of Two Arrays II     Total Accepted: 1340 Total Submissions: 3078 Difficulty: Easy   Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1,...

walker lee 6823

leetcode 350. Intersection of Two Arrays II

Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2]. Note: Each element in the result should appear as ma

淡然坊 358

【leetcode刷题记录】350. 两个数组的交集 II(java实现)

题目描述: 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9] 来源:力扣(LeetCode) 链接:https://leetcode-c

weixin_52939031的博客 481

leetcode-350 Intersection of Two Arrays II

题目 求两数组交集 Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] Example 2: Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4] Outp...

不思量 145

LeetCode350 Intersection of Two Arrays II

题目: Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] Example 2: Input:...

zhangjun62的博客 173
上一篇: LeetCode算法题-Intersection of Two Arrays(Java实现-四种解法)
下一篇: LeetCode算法题-Valid Perfect Square(Java实现-四种解法)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值